¿Qué endianness usa Java en su máquina virtual? Recuerdo leer en alguna parte que depende de la máquina física en la que se está ejecutando, y luego en otros lugares que he leído que siempre es, creo, Big Endian. ¿Cual es correcta?Endianness de la máquina virtual de Java
Respuesta
Los datos de multibyte en los archivos class
se almacenan big-endian.
De The Java Virtual Machine Specification, Java SE 7 Edition, Chapter 4: The class
File Format:
Un archivo de clase se compone de una corriente de bytes de 8 bits. Todas las cantidades de 64 bits, 32 bits y de 64 bits están compiladas por con lectura en dos, cuatro y ocho bytes consecutivos de 8 bits, respectivamente. Los elementos de datos multibyte siempre se almacenan en orden big-endian, donde los bytes altos son los primeros.
Además, el operando en una instrucción bytecode también es big-endian si abarca múltiples bytes.
De The Java Virtual Machine Specification, Java SE 7 Edition, Section 2.11: Instruction Set Summary:
Si un operando es más de un byte en tamaño, a continuación, se almacena en el byte bigEndian orden de alto orden primero. Para ejemplo, un índice de 16 bits sin signo en las variables locales se almacena como dos bytes sin signo,
byte1
ybyte2
, tales que su valor es(byte1 << 8) | byte2
.
Así que sí, creo que se puede decir que la Máquina Virtual de Java utiliza big-endian.
Los datos de trabajo reales almacenados en el proceso en ejecución casi con seguridad coincidirán con la duración del proceso de ejecución. En general, los formatos de archivo (incluidos los archivos de clase) estarán en orden de red (big endian).
En general, es difícil saber qué hace la máquina debajo, ya que la máquina virtual la abstrae. No puede convertir short[]
en byte[]
como puede hacerlo en C y C++. java.nio.ByteOrder.nativeOrder() debería darle la endianess subyacente. La idoneidad coincidente es útil cuando se utilizan almacenamientos intermedios NIO que no son de bytes.
- 1. Error: No se pudo crear la Máquina Virtual de Java
- 2. Señales de manejo en la máquina virtual Java
- 3. Java "máquina virtual" vs. Python "Interpreter" lenguaje?
- 4. ¿PHP tiene una máquina virtual como Java?
- 5. Identificación de CPU en la máquina virtual
- 6. No se pudo crear la máquina virtual Java
- 7. no se pudo crear la máquina virtual Java
- 8. de código abierto máquina virtual
- 9. Única máquina virtual
- 10. ¿La máquina virtual Java es realmente una máquina virtual en el mismo sentido que mi archivo VMWare o Parallels?
- 11. Java: el reemplazo de DataInputStream endianness
- 12. Diagramas/referencias de la arquitectura de la máquina virtual Python
- 13. KVM api para iniciar la máquina virtual
- 14. error de Windows 2 se produjo durante la carga de la máquina virtual de Java
- 15. ¿Dónde está la versión actual de la especificación de máquina virtual de Java?
- 16. ¿Cómo funciona una máquina virtual?
- 17. Cómo escribir una máquina virtual
- 18. Emulador AS400 o máquina virtual
- 19. Actualización de VirtualBox trashed mi máquina virtual
- 20. Aceleración de máquina virtual para Android Emulator
- 21. ¿Qué significa tener una máquina virtual Java bifurcada?
- 22. Endianness de enteros en Python
- 23. Java se "se produjo durante la inicialización de la máquina virtual"
- 24. ¿De qué se compone el tiempo de inicio en la máquina virtual Java?
- 25. lo que hará la máquina virtual Java al ejecutar múltiples aplicaciones java
- 26. ¿Cómo mejorarías Dalvik? La máquina virtual de Android
- 27. FTP pasivo en la máquina virtual de Windows Azure
- 28. Cerrar sesión en una sesión SSH en la máquina virtual Erlang sin detener la máquina virtual ni dejar procesos obsoletos
- 29. ¿Funciona Google V8 de manera similar a la máquina virtual Java?
- 30. ¿Cómo decide java-service-wrapper si usar la máquina virtual de 32 o 64 bits?
Esta respuesta es muy engañosa. Todas las referencias explican cómo se almacenan los valores de varios bytes en los archivos de clase. Y el archivo de clase usa big endian. Sin embargo, en el tiempo de ejecución, todas las implementaciones de Java que conozco almacenan datos de variables y estructuras de datos en orden nativo de bytes. Lo más probable es que también se aplique a los operandos de instrucción una vez que el archivo de clase se haya cargado en un formato ejecutable mejor. Todo lo demás sería tremendamente lento en pequeñas arquitecturas endian como i386. – Codo