虛擬機結構圖
從圖中看出:
JVM虛擬機主要有三大部分組成:
1. 類加載器
2. JVM運行時內存
3. 執行引擎
一、類加載器
類加載器主要用來加載字節碼文件(.class)到內存中
二、內存結構
如圖:可將內存分為兩大部分,一、線程共享內存區域;二、線程私有內存區域
2.1 線程共享內存
共享內存有兩部分:方法區、堆內存
- 方法區:主要用來存儲類加載器加載的類的原始數據,如類名、類的繼承信息、類上的注解信息等等;
- 堆內存:凡是創建的新的對象都會放到堆內存中,如
new Student()
2.2 內存私有內存
私有內存主要有三塊:程序計數器、JVM虛擬機棧、本地方法棧
- 程序計數器:主要是記錄當前線程被CPU執行程序的行數,方便CPU下次切換過來繼續執行;
- JVM虛擬機棧:用來存儲局部變量、對象引用信息、方法參數信息等;
- 本地方法棧:用來存儲本地方法的內容,本地方法指JVM需要依托操作系統才能執行的方法,需要通過JVM調用操作系統來完成的一些事件。
三、執行引擎
執行引擎主要分為三部分:解釋器、即時解釋器(JIT)、垃圾回收器(GC)
- 解釋器:因為JVM目前執行的是.class字節碼文件,但是CPU無法識別字節碼,CPU只能識別機器碼,所以.class需要通過解釋器來將字節碼文件解釋為機器碼;
- 即時解釋器:如果所有的.class在運行的時候都需要解釋,那么效率將會不高,所有JVM提出熱點代碼的概念,即時解釋器可以發現熱點代碼(經常執行的代碼片段),將其機器碼緩存起來,來保證熱點代碼的即時解釋;
- 垃圾回收器:用來回收對象,釋放內存。