1加载类元信息
2先计算对象占用空间大小,然后在堆中划分一块内存给新的对象。
3处理并发问题。
4属性的默认初始化(0值初始化)。
5设置对象头,指向方法区的类元信息。
6属性显式初始化、代码块中初始化和构造器中初始化。
对象内存布局
1(jvm通过栈帧的对象引用访问对象实例)栈帧------堆区------元数据指针------方法区。
2对象访问访问方式: 句柄访问 或 直接指针(Hotspot)。
句柄访问: 栈帧的引用 ------ 堆中的句柄池 ----找到其中对象类型数据的指针 -------- 对象类型数据(方法区)/ ---找到对象实例数据的指针 -------- 对象实例数据(堆中的实例池)。
直接指针: 栈帧的引用 ------ 堆中的实例数据 (对象实体中有对象类型数据的指针)
|
|
|
对象类型数据(方法区)
3 句柄访问的好处栈帧引用指向的地址稳定。
4元空间属于直接内存一部分和堆无关。
|-------------元数据区 |------ 本地内存
本地内存 --------- Java process memory -----------
|-------------直接内存 |------ 堆