Java虛擬機-02 對象創建與佈局

對象創建

1、內存分配

分配方式

  • 指針碰撞 - 適用於內存分佈整齊,帶有壓縮功能的垃圾收集器
  • 空閒列表 - 適用於類似CMS垃圾收集器

2、搶佔內存空間

搶佔方式

  • CAS
  • 預先分配 thread local allpcation buffer 可通過-XX:+/-UserTLAB配置

3、內存空間初始化為零值

4、初始化對象頭

5、執行<init>方法/<init>

對象佈局

對象頭

對象頭分為以下兩個部分:

  1. 運行數據:哈希碼、GC分代年齡、鎖標誌等
  2. 類型指針:指向元數據 - 確定對象屬於哪個類

對象訪問定位

依賴具體jvm的實現,有以下兩種

  1. 句柄 - 引用穩定
  2. 直接指針 - 主流 更快


分享到:


相關文章: