创建对象的过程:
1、类加载,加载该对象所相关的类。
2、计算对象大小并分配内存。(TLAB处理内存分配并发问题)
3、对象属性进行默认初始化。
4、设置对象的对象头。
5、显示初始化、代码块初始化(自上而下进行赋值)。
6、构造器初始化。
注:5、6步为字节码中的方法执行。
对象在堆中创建时分为三部分:对象头,实例数据,对其填充;
·对象头中包含两部分:运行时元数据,类型指针;
·运行时元数据:哈希值,GC分代年龄,锁状态标志……
·类型指针:指向方法区中的该类的元信息。
·实例数据中包含父类的实例数据
![](https://img-blog.csdnimg.cn/20210623222406671.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzg0MzA0,size_16,color_FFFFFF,t_70)
Hotspot中对象访问定位是通过类型指针访问,如图1;
还有通过句柄访问,如图2:
![](https://img-blog.csdnimg.cn/20210623224137758.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzg0MzA0,size_16,color_FFFFFF,t_70)