虛拟機記憶體中資料細節
如何建立?
如何布局?
如何通路?
語言層面:建立對象僅僅是一個new關鍵字而已。
虛拟機中:
1 檢查指令的參數是否在常量池中定位到一個類的符号引用,并檢查這個符号引用代表的類是否被加載,解析,初始化;
2 虛拟機為新生對象配置設定記憶體.
分為3個區域:
對象頭
執行個體資料
對其填充
分為2部分:
1、用于存儲對象自身的運作時資料(hashCode,GC分代年齡,鎖狀态标志,線程持有的鎖,偏向線程的id,偏向時間戳等)。
2、類型指針,對象指向它的類中繼資料的指針,虛拟機通過該指針确定對象是那個類的執行個體。
1、使用句柄通路,java堆會分配置設定一塊記憶體作為句柄池,reference中存儲就是對象的句柄位址,句柄包含對象執行個體資料與類型資料各自的具體位址資訊。
優點:reference存儲穩定的句柄位址,對象移動至改變執行個體資料指針,不會影響reference本身。

2、直接使用指針通路,java堆對象布局中就必須考慮如何放置通路類型資料相關資訊,而reference中存儲的直接是對象位址。
優點:速度快,節省一次指針定位的時間開銷