Java虛擬機器-物件的建立,物件頭
阿新 • • 發佈:2019-02-07
建立
- new
- 檢查new指令的引數,是否能在常量池中定位到一個類的引用符號
- 檢查該類是否被載入、解析和初始化。 沒有則執行相應的過程
- 分配記憶體 存在2中情況。取決於java記憶體堆是否規則
a。指標碰撞 連續的只要移動指標即可 Serial、ParNew Compact等帶有壓縮整理的 使用此方法
b。空閒列表 ; CMS 基於Mark-Sweep演算法的 收集器的時候。 - 考慮是否執行緒安全
a: 同步,保證原子性
b:本地執行緒分配緩衝 TLAB Thread Local Alloction Buffer 只有TLAB用完 才同步 - 記憶體空間初始化為零值
- 物件頭 (hash碼 是否有偏向鎖, GC分代資訊 元資料等
物件頭
a: 雜湊碼,分代年齡
b:鎖,偏向鎖,偏向ID
物件的訪問定位
- 控制代碼
- java棧本地變量表中 reference指向控制代碼,控制代碼指向例項資料和型別資料
- reference存放的是穩定的控制代碼地址
- 物件移動只會改變控制代碼中的例項資料指標,不改變reference
- 直接指標訪問
- 速度快
- 節省開銷