創建
- 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
- 直接指針訪問
- 速度快
- 節省開銷