Java虛擬機學習筆記1-內存區域

 
1.方法區:(非堆區)存儲類信息(版本,字段,方法,接口,常量(類加載後存儲在運行時常量池中),靜態變量),即時編譯器編譯後的代碼
運行時常量池:存儲常量信息,主要是這個東東具有動態性,即在程序運行期間可以動態往裏面插入常量。比如String類的intern函數。

2.:存儲對象,數組

3.虛擬機棧:存儲棧幀

棧幀:每call一個方法,就創建一個棧幀,裏面包含局部變量表,操作棧,動態鏈接,方法出口等信息

局部變量表:存儲基本數據類型(int,long,double...),對象引用reference,returnAddress類型。64位點long和double佔用兩個slot,其餘均只佔用一個slot。

對象引用:有句柄實現方式和直接指針實現方式。

句柄實現方式:reference指向java堆中的句柄池,每個對象的句柄包含兩個指針(指向java堆中實例池中的對象實例以及指向方法區中的對象類型)。

優點:當垃圾收集時,移動對象只涉及修改句柄指針,reference不用修改

直接指針實現方式:reference指向java堆中的對象,對象包含實例數據以及一個指向方法區中對象類型點指針。

優點:訪問對象實例速度快,相比句柄,少了一次指針定位。

4.本地方法棧:用於調用本地方法存儲相關信息。在sun的hotspot虛擬機中,虛擬機棧和本地方法棧合二爲一共用虛擬機棧。

5.程序計數器:字面意思,佔用很小的一點點內存。

6.直接內存:虛擬機以外的內存,通過調用本地方法申請。

發佈了13 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章