對象創建
1.虛擬機遇到一個new指令時,首先將去檢查這個指令的參數是否能在常量池中定位到一個類的符號引用
2.檢查這個符號引用代表的類是否已經被加載,解析和初始化過。如果沒有,那必 須先執行響應的類加載過程
3.在類加載檢查功通過后,為新生對象分配內存。對象所需的內存大小在類加載完 成后便可完全確定。
對象內存布局
對象頭,實例數據,對齊填充
- 對象頭分為兩部分,一部分用來記錄對象自身的運行時數據,如在GC中的分代年齡、哈希碼、持有的鎖等等;另一部分是類型指針,用來記錄引用,是誰指向了我?JVM通過這個來確定誰引用了對象。(是不是跟GC Root有關呢?沒有研究過)
- 實例數據是對象真正存儲的有效信息,也是在程序代碼中所定義的各種類型的字段內容。
- 對齊填充不是必然存在的。有的虛擬機要求對象大小必須是8字節的整數倍。
怎么理解呢,就當是你玩游戲時候選擇的一個英雄吧,頭信息一個是他的等級,另一個就是誰操控了他,實例數據就是他的人頭數,裝備等等,因為這些是你靠本事拿來的。