JVM的運行機制
jvm(Java Virtual Machine)是用於java字節碼的虛擬機,包括一套字節碼指令集,一組程序寄存器,一個虛擬機棧,一個方法區和一個垃圾回收器,jvm運行在操作系統之上,不與硬件 設備直接交互
Java源文件在通過編譯器之后被編譯成相應的.class文件,.class文件又被jvm中的解釋器編譯成機器碼在不同的操作系統上運行,每種系統的解釋器都是不同的,但基於解釋器實現的虛擬機是相同的,這也是Java跨平台的原因,在一個java進程開始運行后,虛擬機就開始實例化了,有多個進程啟動就會實例化多個虛擬機實例,進程退出或者關閉,則虛擬機實例消亡,在多個虛擬機實例之間不能共享數據,
Java程序的具體運行過程
第一步Java源文件編譯為字節碼文件 |
第二步jvm將字節碼文件編譯為相應操作系統的機器碼 |
第三步機器碼調用相應操作系統的本地方法庫執行相應的方法 |
Java虛擬機包括一個類加載器子系統(Class Loader SubSystem),運行時數據區(Runtime Data Area) 執行引擎和本地接口庫。本地接口庫通過調用本地方法庫與操作系統交
運行時數據區分為:方法區,本地方法區,虛擬機棧(棧幀),虛擬機堆(老年代,新生代)程序計數器,
類加載器子系統
執行引擎
本地接口庫
本地方法庫
最底層為操作系統
其中
類加載器子系統用於將編譯好.class文件加載JVM中
運行時數據區用於存儲在JVM運行過程中產生的數據,包括程序計數器,方法區,本地方法區,虛擬機棧,虛擬機堆
執行引擎包括即時編譯器和垃圾回收器,即時編譯器用於將java字節碼編譯程具體的機器碼,垃圾回收器用於回收運行過程中不再使用的對象
本地接口庫用於調用操作系統的本地方法庫完成具體的指令操作
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------借鑒於《offer來了》書籍