【筆記】JVM內(nèi)存模型

1. 簡(jiǎn)介

jvm_memory.png
  • 線程私有區(qū):

    • 程序計(jì)數(shù)器: 當(dāng)前線程字節(jié)碼地址。
    • 虛擬機(jī)棧: java方法棧幀。
    • 本地方法棧: native方法棧幀。
  • 線程共享區(qū):

    • Java堆: 存儲(chǔ)對(duì)象。
    • 方法區(qū): 存放類信息、常量、靜態(tài)變量、編譯器編譯后的代碼等數(shù)據(jù)。
    • 常量池: 方法區(qū)的一部分,存放編譯器生成的各種字面量和符號(hào)引用。

2. 詳細(xì)分析

stack_heap_info.png

2.1 程序計(jì)數(shù)器

當(dāng)線程正在執(zhí)行一個(gè)Java方法時(shí),PC計(jì)數(shù)器記錄的是正在執(zhí)行的虛擬機(jī)字節(jié)碼的地址;當(dāng)線程正在執(zhí)行的一個(gè)Native方法時(shí),PC計(jì)數(shù)器則為空(Undefined)。

2.2 虛擬機(jī)棧

java方法的棧幀包括:

  1. 局部變量表 (locals大小,編譯期確定),一組變量存儲(chǔ)空間, 容量以slot為最小單位。

  2. 操作棧(stack大小,編譯期確定),操作棧元素的數(shù)據(jù)類型必須與字節(jié)碼指令序列嚴(yán)格匹配

  3. 動(dòng)態(tài)連接, 指向運(yùn)行時(shí)常量池中該棧幀所屬方法的引用,為了 動(dòng)態(tài)連接使用。

    • 前面的解析過程其實(shí)是靜態(tài)解析;
    • 對(duì)于運(yùn)行期轉(zhuǎn)化為直接引用,稱為動(dòng)態(tài)解析。
  4. 方法返回地址

    • 正常退出,執(zhí)行引擎遇到方法返回的字節(jié)碼,將返回值傳遞給調(diào)用者
    • 異常退出,遇到Exception,并且方法未捕捉異常,那么不會(huì)有任何返回值。
  5. 額外附加信息,虛擬機(jī)規(guī)范沒有明確規(guī)定,由具體虛擬機(jī)實(shí)現(xiàn)。

可能會(huì)出現(xiàn)的異常:

  • StackOverFlowError: 當(dāng)線程請(qǐng)求棧深度超出虛擬機(jī)棧所允許的深度時(shí)拋出

  • OutOfMemoryError: 部分java虛擬機(jī)會(huì)動(dòng)態(tài)拓展虛擬機(jī)棧,當(dāng)Java虛擬機(jī)動(dòng)態(tài)擴(kuò)展到無法申請(qǐng)足夠內(nèi)存時(shí)拋出

2.3 本地方法棧

與虛擬機(jī)棧類似,有些java虛擬機(jī)將虛擬機(jī)棧和本地方法棧合二為一,比如Sun HotSpot虛擬機(jī)。

2.4 java堆

幾乎存放著所有的對(duì)象實(shí)例和數(shù)組數(shù)據(jù)。JIT編譯器有棧上分配、標(biāo)量替換等優(yōu)化技術(shù),導(dǎo)致部分對(duì)象實(shí)例數(shù)據(jù)不存在Java堆,而是棧內(nèi)存。

java_object.png

2.5 方法區(qū)

2.6 運(yùn)行時(shí)常量池

存放編譯器生成的各種字面量符號(hào)引用。運(yùn)行時(shí)常量池除了編譯期產(chǎn)生的Class文件的常量池,還可以在運(yùn)行期間,將新的常量加入常量池,比較常見的是String類的intern()方法。

  • 字面量:與Java語言層面的常量概念相近,包含文本字符串、聲明為final的常量值等。

  • 符號(hào)引用:編譯語言層面的概念,包括以下3類:

    • 類和接口的全限定名
    • 字段的名稱和描述符
    • 方法的名稱和描述符
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容