1. 程式人生 > 其它 >java物件在JVM堆中的資料結構

java物件在JVM堆中的資料結構

資料結構

java物件和陣列是存放在堆中的,那麼這些instance的資料結構是什麼呢?

  • 物件頭
    • 第一部分markword,用於儲存物件自身的執行時資料,如雜湊碼(HashCode)、GC分代年齡、鎖狀態標誌、執行緒持有的鎖、偏向執行緒ID、偏向時間戳等。
    • 第二部分是klass,型別指標,虛擬機器通過這個指標來確定這個物件是哪個類的例項。

物件頭存放的是這個物件的一些元資料資訊。例如每個物件都有雜湊值,GC分代年齡,鎖狀態標誌等,這些資訊就是存放在物件頭中。

  • 實際資料

物件真正儲存的有效資訊就是放在這裡的,也是在程式程式碼中所定義的各種型別的欄位內容。無論是從父類繼承下來的,還是在子類中定義的,都需要記錄起來。

  • 對齊填充

對齊填充並不是必然存在的,也沒有特別的含義,它僅僅起著佔位符的作用。由於HotSpot VM的自動記憶體管理系統要求物件起始地址必須是8位元組的整數倍,換句話說,就是物件的大小必須是8位元組的整數倍。而物件頭部分正好是8位元組的倍數(1倍或者2倍),因此,當物件例項資料部分沒有對齊時,就需要通過對齊填充來補全。

轉載

https://www.cnblogs.com/james111/p/7273953.html

XFS