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?
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
andbyte2
, such that its value is(byte1 << 8) | byte2
.
So yes, I think it can be said that the Java Virtual Machine uses big-endian.