JVM -- 物件的記憶體佈局

博_採_眾_長發表於2020-10-25

JVM – 物件的記憶體佈局

在這裡插入圖片描述

記憶體佈局

1️⃣物件頭(Header)

      包含兩部分

              執行時資料區(Mark World)

                        ✔雜湊值(HashCode)
                        ✔GC分代年齡
                        ✔鎖狀態標誌
                        ✔執行緒持有的鎖
                        ✔偏向執行緒ID
                        ✔偏向時間戳

              型別指標:如果是陣列,還需記錄資料的長度

      說明:如果是陣列,還需記錄陣列的長度

2️⃣例項例項(Instance Data)

      說明

              1.它是物件真正儲存的有效資訊,包括程式程式碼中定義的各種型別的欄位(包含從父類繼承下來的和本身擁有的欄位)

      規則

              1.相同寬度的欄位總是被分配在一起
              2.父類中定義的變數會出現在子類之前
              3.如果CompactFields引數為true(預設為true):子類的窄變數可能插入到父類變數的空間

3️⃣對齊填充(Padding)

       不是必須的,也沒特別含義,僅僅起到佔位符的作用

相關文章