我很困惑,因爲在JVM的角色。我的理解是正確的,JVM只將字節碼轉換爲機器碼?所以基本上,OS,JVM和CPU之間存在通信。我的假設是字節碼被轉換爲機器碼,然後由CPU處理。字節碼是否必須轉換爲機器碼?
回答
JVM
是一個虛擬機。
就像在VMware或VirtualBox上安裝某些操作系統(Linux,Solaris)時那樣,它們就是虛擬機。他們運行在主機操作系統之上。
JVM
是不同的,它的機器代碼是bytecode
。有些機器具有高級語言作爲他們的機器代碼。如果JVM要在硬件上運行,而不在主機OS上運行,那麼期望硬件能夠使用bytecode
指令集。
但是,由於它在主機操作系統上運行,任何字節碼指令在轉換爲機器碼後都會傳送到主機。在VMware/VirtualBox的情況下,這些軟件會照顧它。在JVM的情況下,它由JRE
完成。
因此,每個字節碼指令都轉換爲機器碼?然後傳達給OS和OS到CPU? – manojpotla
是的,但JVM不參與,它必須由包裝環境完成,在這種情況下JRE。把它想象成運行批處理文件或shell腳本,批處理文件中的每條指令都是一個與字節碼中的指令相當的指令。但是解釋器必須根據批處理文件中的每條指令找到適當的程序來運行。 – 11thdimension
JAVA是一種編譯和解釋語言,不僅僅是解釋型語言。讓我們一步一步執行它的程序。
- 假設我們編寫一個Java程序並將其保存爲「hello.java」在硬盤上的某個文件夾中。
- java編譯器的名稱是「javac」。爲了編譯它,我們必須在命令行上編寫「javac hello.java」。
- 在此階段,高級代碼被轉換爲機器級代碼。 Java將它轉換爲一個.class文件作爲「hello.class」。此代碼也稱爲字節代碼,因爲此文件中的每條指令均爲1個字節。
- 此字節碼也可以在任何其他平臺(如 Mac,Linux或Windows)上帶走。對於其執行 ,它只需要相應操作系統的JVM。因此,JAVA被稱爲第一平臺獨立和體系結構中立的語言。
- 現在,爲了執行它,使用瞭解釋器。它本身被命名爲「java」。對於它的解釋,應該在命令行中使用「java hello.java」。它在內部調用類加載器,該加載器負責將硬盤中的'hello.class'文件加載到JVM的地址空間。
- 這裏有一個'字節代碼驗證器',用於驗證代碼以避免運行時失敗。在成功驗證之後,JVM藉助OS執行逐字節代碼。
因此,整個Java程序由JVM和OS執行。雖然JVM充當Java程序的小型操作系統,但它僅在指令不在其範圍內時才涉及OS。
- 1. 是否可以將LLVM字節碼轉換爲Java字節碼?
- 2. 如何將字節碼轉換爲機器本機代碼
- 3. 是否有可能將XML節點標記爲「必須轉換」?
- 4. 編碼:TypeError:寫入()參數必須是str,而不是字節
- 5. 字節碼轉換DEX
- 6. Python虛擬機(CPython)將字節碼轉換爲機器語言嗎?
- 7. Spark如何將字節碼轉換爲機器碼指令的運行時間轉換?
- 8. 將組件轉換爲機器代碼
- 9. 字節數組轉換爲ASCII字符串是亂碼
- 10. TypeError:無法將字節轉換爲str,然後TypeError:write()參數必須是str,而不是字節
- 11. builtins.TypeError:必須是str,而不是字節
- 12. 當方法參數是字節時,爲什麼我必須將0轉換爲字節?
- 13. 將aspx代碼轉換爲剃鬚刀
- 14. 在編譯器將其轉換爲字節碼之前,是否可以從jython中找到java源代碼?
- 15. 將BCI(字節碼索引)轉換爲源代碼行號
- 16. 如何將Java源代碼轉換爲字節代碼?
- 17. 將彙編代碼轉換爲機器代碼
- 18. 將源代碼轉換爲Java字節碼的實用程序是什麼
- 19. 參數必須是str字節
- 20. Struct.Error,必須是字節對象?
- 21. TypeError:文本必須是unicode或字節
- 22. HTTP請求標頭是否必須是UTF-8編碼?
- 23. 轉換字節順序的C代碼?
- 24. 必須從原生的Android轉換代碼Xamarin的Android
- 25. 表格必須轉換爲System.Web.UI.Page
- 26. 爲什麼我必須轉換變量?
- 27. 是否可以將tensorflow代碼轉換爲theano代碼?
- 28. 下面的代碼是否將字符轉換爲其ASCII值?
- 29. 爲什麼你必須將一個字節的按位操作轉換爲Java中的一個字節?
- 30. 轉換組件在C機器碼++
我建議你閱讀:https://en.wikipedia.org/wiki/Java_virtual_machine – PSo