Search code examples
javavirtual-machineendianness

Java's Virtual Machine's Endianness


What endianness does Java use in its virtual machine? I remember reading somewhere that it depends on the physical machine it's running on, and then other places I have read that it is always, I believe, big endian. Which is correct?


Solution

  • Multibyte data in the class files are stored big-endian.

    From The Java Virtual Machine Specification, Java SE 7 Edition, Chapter 4: The class File Format:

    A class file consists of a stream of 8-bit bytes. All 16-bit, 32-bit, and 64-bit quantities are constructed by reading in two, four, and eight consecutive 8-bit bytes, respectively. Multibyte data items are always stored in big-endian order, where the high bytes come first.

    Furthermore, the operand in an bytecode instruction is also big-endian if it spans multiple bytes.

    From The Java Virtual Machine Specification, Java SE 7 Edition, Section 2.11: Instruction Set Summary:

    If an operand is more than one byte in size, then it is stored in big-endian order-high-order byte first. For example, an unsigned 16-bit index into the local variables is stored as two unsigned bytes, byte1 and byte2, such that its value is (byte1 << 8) | byte2.

    So yes, I think it can be said that the Java Virtual Machine uses big-endian.