對象創建的過程你真的懂嗎?

我是一個從汽車行業轉行IT的項目經理,我是Edward,如想了解更多,請關注我的公衆號【轉行項目經理的逆襲之路】。我們一起過一下

在這裏插入圖片描述

前兩問:

在這裏插入圖片描述源碼:

class T {
    int m = 8;
}
T t = new T();

彙編碼:

0 new #2 <T>
3 dup
4 invokespecial #3 <T.<init>>
7 astore_1
8 return

申請內存,在堆裏面創建一個新對象。
半初始化,新建對象中的m值是0。
dup
複製操作,因爲invokespecial會消耗一份引用,所以先複製一份
invokespecial
4 invokespecial #3 <T.>
init是調用它的構造方法。
此時對象中的m值是8。
astore_1
將符號和對象建立關聯,即t和堆中的對象。

在這裏插入圖片描述

第三問:
在這裏插入圖片描述

第四問:
markword:
哈希碼、GC信息、鎖信息
classpointer
在這裏插入圖片描述

第五問:
在這裏插入圖片描述

第六問:
在這裏插入圖片描述

第七問:
8+4+4=16

第八問:
虛函數表太費空間

第九問:
在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章