JVM簡介
JVM的組成部分
JVM構成圖(網上廣爲流傳),JVM分爲四部分:
-
Class Loader 類加載器(子系統)
類加載器的作用是加載類文件到內存,比如編寫一個HelloWord.java程序,然後通過javac 編譯成HelloWorld.class文件。Class Loader負責加載HelloWorld.class文件到“運行數據區”。
注:Class Loader只負責加載.class文件,執行由Execution Engine負責。
-
Execution Engine 執行引擎(子系統)
執行引擎也叫做解釋器(Interpreter),負責解釋命令、執行class文件中的指令,與操作系統交互。
-
Native Interface 本地接口(組件)
本地接口主要用於融合不同的編程語言爲Java所用。Java誕生時C/C++是主流編程語言,過去使用C++編寫的網站之後改爲用Java實現。但是不能拋棄所有過去的代碼,因此需要在新的網站中編寫接口,調用過去C/C++程序。具體實現:在內容中開闢一塊區域並標記爲native,Execution Engine 執行時加載native libraies。常見的應用(與硬件相關):通過Java程序驅動打印機、Java 系統管理生產設備。
使用native方法時,不再受JVM限制,容易出現JVM無法控制的native heap OutOfMemory。
-
Runtime data area 運行數據區(組件,即JVM內存)
程序完全被加載至運行數據區之後纔開始運行。
JVM框架運行流程:加載器加載文件 → 執行器處理數據 → 本地接口與異構系統交互。
java.exe將class文件放在JVM中運行。JVM加載class文件並處理class文件內容,java.exe將字節碼解釋或者編譯爲機器指令,執行指令時會與計算機交互。
JVM將每一條需要執行的字節碼交給解釋器,解釋器將字節碼翻譯成對應的機器碼,解釋器執行機器碼(如需與OS交互,解釋器會與OS交互。)。