Java虛擬機進階之二:運行時數據區內存劃分

Java虛擬機進階之二:運行時數據區內存劃分

目標

1, 瞭解內存是劃分爲哪五部分的?

2, 每一部分具體是做什麼的。


Note: 本部分的內容信息容量較大,細節較多。文章將從淺到深來介紹。



第一部分:各數據區線程共享/線程獨立情況

clip_p_w_picpath002


線程共享

             方法區(Method Area),堆(heap)


線程獨立

             虛擬機棧(Java VM Stack)本地方法棧(Native Stack)程序計數器(Program Counter Register)



第二部分:各數據區功能

方法區:存儲已被虛擬機加載的類的信息,常量,靜態變量,及時編譯後的代碼

:存放對象實例

虛擬機棧:方法執行的內存模型,創建棧幀,存儲變量及方法出口

本地方法棧:執行Native方法的內存模型

程序計數器:虛擬機多線程切換,記錄當前程序所執行的字節碼的行號



第三部分:更多的細節


請仔細研讀第三部分,這部分涉及到深入的內容,可以參考Java Vm Specification


可以點擊圖片放大。

wKiom1M35H-iY9udAAdOsoz3Ufs313.jpg


For More Details:

1, String intern()

clip_p_w_picpath006


2,常量池(Constant Pool Table) vs 運行時常量池(Runtime Constant Pool)

根據官方文檔:

運行時常量池(Runtime Constant Pool)是每一個類或接口的常量池(Constant_Pool

§4.4)的運行時表示形式,它包括了若干種不同的常量:從編譯期可知的數值字面量到必須運行

期解析後才能獲得的方法或字段引用。運行時常量池扮演了類似傳統語言中符號表(Symbol

Table)的角色,不過它存儲數據範圍比通常意義上的符號表要更爲廣泛。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章