對象創建
1、內存分配
分配方式
- 指針碰撞 - 適用於內存分佈整齊,帶有壓縮功能的垃圾收集器
- 空閒列表 - 適用於類似CMS垃圾收集器
2、搶佔內存空間
搶佔方式
- CAS
- 預先分配 thread local allpcation buffer 可通過-XX:+/-UserTLAB配置
3、內存空間初始化為零值
4、初始化對象頭
5、執行<init>方法/<init>
對象佈局
對象頭
對象頭分為以下兩個部分:
- 運行數據:哈希碼、GC分代年齡、鎖標誌等
- 類型指針:指向元數據 - 確定對象屬於哪個類
對象訪問定位
依賴具體jvm的實現,有以下兩種
- 句柄 - 引用穩定
- 直接指針 - 主流 更快
閱讀更多 IT學習分享 的文章