JVM整體結構

jvm整體結構

1、類加載子系統 : 類加載子系統負責從文件系統或者網絡中加載Class信息,加載的類信息存放于一塊稱為方法區(qū)的內存空間。除了類的信息外,方法區(qū)中可能還會存放運行時常量池信息,包括字符串字面量和數字常量(這部分常量信息是Class文件中常量池部分的內存映射)

2、堆:java堆在虛擬機啟動的時候建立,它是java程序最主要的內存工作區(qū)域。幾乎所有的java對象實例都存放在java堆中。堆空間是所有線程共享的,這是一塊與java應用密切相關的內存空間。

3、java棧:每一個java虛擬機線程都有一個私有的java棧,一個線程的java棧在線程創(chuàng)建的時候被創(chuàng)建,java棧中保存著幀信息,java棧中保存著局部變量、方法參數,同時和java方法的調用、返回密切相關

4、本地方法棧:本地方法棧和java棧非常類似,最大的不同在于java棧用于方法的調用,而本地方法棧則用于本地方法的調用,作為對java虛擬機的重要擴展,java虛擬機允許java直接調用本地方法(通常使用C編寫)

5、方法區(qū):線程共享,類的所有字段和方法字節(jié)碼,以及一些特殊方法如構造函數,接口代碼也在此定義。簡單說,所有定義的方法的信息都保存在該區(qū)域,靜態(tài)變量+常量+類信息(構造方法/接口定義)+運行時常量池都存在方法區(qū)中,雖然Java虛擬機規(guī)范把方法區(qū)描述為堆的一個邏輯部分,但是它卻有一個別名叫做?Non-Heap(非堆),目的應該是與?Java?堆區(qū)分開來

6、程序計數器:也叫PC寄存器,是每一個線程私有的空間,java虛擬機會為每一個java線程創(chuàng)建PC寄存器。在任意時刻,一個java線程總是在執(zhí)行一個方法,這個正在被執(zhí)行的方法稱為當前方法。如果當前方法不是本地方法,PC寄存器就會指向當前正在被執(zhí)行的指令。如果當前方法是本地方法,那么PC寄存器的值就是undefined

7、執(zhí)行引擎:執(zhí)行引擎是java虛擬機的最核心組件之一,它負責執(zhí)行虛擬機的字節(jié)碼,現代虛擬機為了提高執(zhí)行效率,會使用即時編譯技術將方法編譯成機器碼后再執(zhí)行。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容