对象创建的过程你真的懂吗?
程序员文章站
2022-05-23 14:01:05
...
我是一个从汽车行业转行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
第八问:
虚函数表太费空间
第九问: