对象的创建过程
- 1.class loading
- 2.class linking(verification,preparation,resolution)
- 3.class initializing
- 4.申请对象内存
- 5.成员变量赋默认值
- 6.调用构造方法
- 1.成员变量顺序赋初始值
- 2.执行构造方法语句
对象在内存中的布局
普通对象
- 1.对象头: markword 8
- 2.ClassPointer指针: -XX:+UserCompressedClassPointers位4字节 不开启为8字节
- 3:实例数据
- 1.引用类型: -XX:+UserCompressedOops为4字节 不开启为8字节
- 4.Padding对齐, 8的倍数
数组对象
- 1.对象头: markword 8
- 2.ClassPointer指针: -XX:+UserCompressedClassPointers位4字节 不开启为8字节
- 3:数据长度: 4字节
- 4.数组数据
- 5.对齐 8的倍数
对象头具体包括什么
8字节64位具体分配
- 1.锁标记
- 2.GC标记
- 3.hashCode部分: 31位的hashCode->System.identityHashCode()
对象定位
- 1.句柄池
- 2.直接指针(HotSpot实现的方式)
对象分配
尝试分配到栈,如果不行,则
- 1.对象很大,分配到老年代
- 2.对象不大,分配到本地线程,到eden区