Java';s虚拟机&x27;s端性

Java';s虚拟机&x27;s端性,java,virtual-machine,endianness,Java,Virtual Machine,Endianness,Java在其虚拟机中使用的endianness是什么?我记得在某个地方读到它取决于它运行的物理机器,然后在其他地方读到它总是,我相信,big endian。哪个是正确的?类文件中的多字节数据以大端存储 从,: 类文件由一个 8位字节。所有16位、32位和 64位量由 读二,四,八 分别为连续的8位字节。 始终存储多字节数据项 在大端序中,高 字节优先 此外,字节码指令中的操作数如果跨越多个字节,也是大端的 从,: 如果操作数在中超过一个字节 大小,然后将其存储在big-endian中 首先对高位

Java在其虚拟机中使用的endianness是什么?我记得在某个地方读到它取决于它运行的物理机器,然后在其他地方读到它总是,我相信,big endian。哪个是正确的?

类文件中的多字节数据以大端存储

从,:

类文件由一个 8位字节。所有16位、32位和 64位量由 读二,四,八 分别为连续的8位字节。 始终存储多字节数据项 在大端序中,高 字节优先

此外,字节码指令中的操作数如果跨越多个字节,也是大端的

从,:

如果操作数在中超过一个字节 大小,然后将其存储在big-endian中 首先对高位字节进行排序。对于 例如,将无符号16位索引转换为 局部变量存储为两个 无符号字节、
字节1
字节2
,例如
它的值是
(字节1),运行进程中存储的实际工作数据几乎肯定会与执行进程的尾端相匹配。通常,文件格式(包括类文件)将按网络顺序排列(big-endian)


通常很难判断机器在下面做什么,因为它被虚拟机抽象掉了。你不能将
short[]
转换为
byte[] > C和C++中。应该给你java的基本子句。当使用非字节的NIO缓冲区时,匹配的子句是有用的。< /P>这个答案是非常误导的。所有的引用解释了多字节值是如何存储在类文件中的。而且类文件确实使用了大的Endiad。然而,在运行时,我知道的所有Java实现都是O。f以本机字节顺序存储变量和数据结构的数据。一旦类文件加载到更好的可执行格式,它很可能也适用于指令操作数。在i386这样的小端体系结构上,其他一切都会非常慢。JVM可以从byt的POV中显示为大端ecode在执行时仍然以本机endianness实际存储多字节值这里的规则是,只要JVM按照运行在其中的来宾代码的POV的预期行为,实际的实现细节就无关紧要。例如,解释与JIT到本机代码。因为Java代码不能轻易地将
int
转换为
字节[]
,JVM中运行的Java代码通常看不到这一细节,因此JVM很容易只使用本机C
int32\t
。@Codo Java在i386等小端结构上的速度非常慢。如果指令集指定操作需要具有大端参数,则将它们存储为小端参数这将导致更糟糕的性能,因为只有使用指令集才能从little-endian转换为big-endian,而指令集反过来必须反转为little-endian来执行操作,结果将其转换为big-endian以匹配指令集规格,然后再次转换为little-endian,仅将数据存储为big e结果文件中的ndian。