我是一個從汽車行業轉行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
第八問:
虛函數表太費空間
第九問: