que programacion maquina implicaciones descargar java virtual-machine endianness

programacion - Endianidad de la máquina virtual de Java



que es jvm en programacion (2)

¿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?


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 un short[] en un byte[] como pueda en C y C ++. java.nio.ByteOrder.nativeOrder() debería darle la endianess subyacente. La compatibilidad con Endianess es útil cuando se utilizan memorias intermedias NIO que no son de bytes.


Los datos de multibyte en los archivos de class se almacenan big-endian.

De la especificación de máquina virtual de Java, Java SE 7 Edition , Capítulo 4: El formato de archivo de class :

Un archivo de clase consiste en una secuencia de bytes de 8 bits. Todas las cantidades de 16 bits, 32 bits y 64 bits se construyen leyendo 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 la especificación de la máquina virtual de Java, Java SE 7 Edition , Sección 2.11: Resumen del conjunto de instrucciones :

Si un operando tiene más de un byte de tamaño, entonces se almacena primero en bytes de orden grande y de alto orden. Por ejemplo, un índice de 16 bits sin signo en las variables locales se almacena como dos bytes sin signo, byte1 y byte2 , de modo que su valor sea (byte1 << 8) | byte2 (byte1 << 8) | byte2 .

Entonces sí, creo que se puede decir que Java Virtual Machine usa big-endian.