1. 程式人生 > >JVM——物件的記憶體分佈

JVM——物件的記憶體分佈

物件在記憶體中的儲存可以分為三部分:物件頭、例項資料、對其填充。

物件頭:

物件頭分為兩部分,第一部分用於儲存物件自身的執行時資料,如雜湊碼,GC分代年齡、鎖狀態標誌、執行緒持有的鎖、偏向執行緒ID等,這部分資料的長度在32位和64位的虛擬機器中(未開啟壓縮指標)分別為32bit和64bit。但是物件執行時需要儲存的資料有很多,可能超出了物件頭資訊的最大儲存,但是由於,物件頭資訊是與物件自身定義的資料無關的額外儲存成本,考慮到虛擬機器的空間效率,將物件頭資訊設定成非規定大小的資料結構,以便在最小的空間儲存最多的資訊。物件頭的另外一部分即指向方法去中的型別資料的指標,特別注意,如果類元資料是陣列的話,物件頭中還必須有一塊用於儲存陣列長度的資料,

因為JVM無法確定Java陣列的大小。

例項資料:

物件儲存的真正的有效資訊,,也就是程式程式碼中所定義的各種型別的欄位的內容。其受JVM的分類的影響會產生不同的分佈。

對其填充:

他的存在沒有特殊的含義,僅僅是為了滿足記憶體的起始地址是8的整數倍。