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