1. 程式人生 > >Java虛擬機器-物件的建立,物件頭

Java虛擬機器-物件的建立,物件頭

建立

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