1. 程式人生 > 實用技巧 >Jvm虛擬機器(二)-HotSpot虛擬機器物件探祕-圖文總結

Jvm虛擬機器(二)-HotSpot虛擬機器物件探祕-圖文總結

第二章主要簡單介紹下物件建立和記憶體佈局,介紹了下虛擬機器中記憶體物件的記憶體使用方式。

物件的建立

虛擬機器中物件的建立
在這裡插入圖片描述

類載入在這裡插入圖片描述

類載入可以說是在Java堆中進行的。其中分配方式的選擇又是根據其堆記憶體空間的是否規整來決定的。

“指標碰撞”(Bump The Pointer)

在這裡插入圖片描述
通過撥動指標來劃分記憶體

“空閒列表”(Free List)

在這裡插入圖片描述
空閒列表記錄未分配的記憶體空間

物件的記憶體佈局

物件在堆記憶體中的儲存佈局

在這裡插入圖片描述
側重點就是
物件頭儲存著物件自身的執行時資料,包含一些 雜湊碼(HashCode)和GC分代年齡,鎖狀態標誌等。

一個物件的記憶體佈局包含: 物件頭、例項資料、對齊填充的資料。

物件頭:儲存物件自身的執行時資料,包含一些 雜湊碼(HashCode)和GC分代年齡,鎖狀態標誌等,位於Mark Word資料結構中,這是一塊極小的記憶體。 型別指標中指向它的型別元資料的指標,Java虛擬機器通過這個指標 來確定該物件是哪個類的例項指標。

例項資料:物件的有效資訊,我們程式碼中定義的各種型別的欄位內容。

對齊填充:使得物件的起始地址必須是8位元組的整數倍。虛擬機器要求。

物件的訪問定位

物件的引用

通過Java棧本地變量表,棧上的reference資料來操作堆上具體的物件
在這裡插入圖片描述
側重點:
物件的引用 reference型別 不等同於物件的本身
兩種訪問方式 : 控制代碼池、直接指標

通過控制代碼池訪問物件

在這裡插入圖片描述

通過直接指標訪問物件

在這裡插入圖片描述

HotSpot虛擬機器

目前總結到的 hotspot虛擬機器所持有的一些特性
在這裡插入圖片描述

總結

該章主要介紹了物件在虛擬機器中的記憶體是如何劃分的,以及物件的儲存和引用的一些介紹,以圖文和思維導圖的形式整理出來,希望能更清晰的展示出來。

目前第二章和後續第三章總體 xmind檔案
連結: https://pan.baidu.com/s/1v-mcCz-0mxNtHvNxq80nYg 密碼: 5gje
在這裡插入圖片描述