Java在其虚拟机中使用什么样的字节顺序?我记得在某个地方看到它取决于它运行的物理机器,然后我读过其他地方,我相信它总是,我认为是大端。哪个是对的?Java的虚拟机的字节码
28
A
回答
30
class
文件中的多字节数据存储为big-endian。
从The Java Virtual Machine Specification, Java SE 7 Edition,Chapter 4: The class
File Format:
一类文件由 8位字节流的。所有16位,32位和 64位量分别由 构成,其分别在连续的8位字节中读取2,4和8个 。 多字节数据项总是以big-endian顺序存储 ,其中高位为 字节。
此外,如果跨越多个字节,字节码指令中的操作数也是大端。
从The Java Virtual Machine Specification, Java SE 7 Edition,Section 2.11: Instruction Set Summary:
如果操作数是 大小超过一个字节,则存储在大端 订单高位字节。对于 例如,一个无符号的16位索引 局部变量被存储为两个 无符号字节,
byte1
和byte2
,例如 其值(byte1 << 8) | byte2
。
所以,我认为可以说Java虚拟机使用big-endian。
14
运行过程中存储的实际工作数据几乎肯定会与执行过程的字节匹配。通常文件格式(包括类文件)将按网络顺序(大端)排列。
通常很难说出机器在底下做什么,因为它被虚拟机抽象掉了。您不能像在C和C++中一样使用short[]
到byte[]
。 java.nio.ByteOrder.nativeOrder()应该给你潜在的恩惠。当使用非字节的NIO缓冲区时,匹配的字节顺序非常有用。
相关问题
- 1. Java的虚拟机和CLR
- 2. 虚拟机是否必须解释字节码,还是可以直接解释虚拟机的程序集?
- 3. 虚拟主机内的虚拟主机
- 4. 虚拟机中的虚拟机 - 网络
- 5. python字节码,解释器和虚拟机
- 6. Java Web Apps虚拟主机
- 7. Java/JSP/Tomcat虚拟主机
- 8. java虚拟机规范
- 9. JVM - Java虚拟机损坏
- 10. Java虚拟机错误
- 11. Java虚拟机不匹配
- 12. java/tomcat虚拟主机
- 13. Java虚拟机崩溃
- 14. Java虚拟机失踪的Aptana Studio的
- 15. KVM(Kilo虚拟机)如何与JVM(Java虚拟机)不同?
- 16. Windbg - 分析虚拟字节
- 17. Python虚拟机(CPython)将字节码转换为机器语言吗?
- 18. 名称2 Java虚拟机的线程
- 19. Java虚拟机的内存初始化
- 20. JavaFX的拖放将使Java虚拟机
- 21. 可用的Java虚拟主机选项
- 22. ClassLoader的虚拟机
- 23. 如何在类加载时调试注入虚拟机的字节码?
- 24. 可以在没有虚拟机的情况下运行字节码
- 25. 使用Puppet获取虚拟机中的主机虚拟机
- 26. 要学习的Java虚拟机源代码
- 27. 流星和节点虚拟主机
- 28. 创建虚拟机并将虚拟机关联到现有的虚拟网络
- 29. 与虚拟机的套接字连接
- 30. Dynamo中的虚拟节点
这个答案具有很高的误导性。所有引用都解释了多字节值如何存储在类文件中。这个类文件的确使用了big endian。然而,在运行时,我知道所有的Java实现都以本地字节顺序存储变量和数据结构的数据。一旦类文件被加载到更好的可执行格式中,它很可能也适用于指令操作数。对于像i386这样的小端架构,其他一切都会非常缓慢。 – Codo 2014-05-02 06:48:40