1. 程式人生 > >Java物件結構

Java物件結構

在HotSpot虛擬機器中,物件在記憶體中儲存的佈局可以分為3塊區域:物件頭(Header)、例項資料(Instance Data)和對齊填充(Padding)。下圖是普通物件例項與陣列物件例項的資料結構:

HotSpot虛擬機器的物件頭包括兩部分資訊:

 

  1. markword

第一部分markword,用於儲存物件自身的執行時資料,如雜湊碼(HashCode)、GC分代年齡、鎖狀態標誌、執行緒持有的鎖、偏向執行緒ID、偏向時間戳等,這部分資料的長度在32位和64位的虛擬機器(未開啟壓縮指標)中分別為32bit和64bit,官方稱它為“MarkWord”。

  1. klass

物件頭的另外一部分是klass型別指標,即物件指向它的類元資料的指標,虛擬機器通過這個指標來確定這個物件是哪個類的例項.

  1. 陣列長度(只有陣列物件有)

如果物件是一個數組, 那在物件頭中還必須有一塊資料用於記錄陣列長度.