对象创建的过程
分配内存:类的准备阶段。类加载完成后就能确定对象分配多少内存。如果虚拟机具有Compact
压缩功能(标记整理),就是用指针碰撞
(记录头尾位置);如果只有标记清理
的虚拟机,就是用空闲列表
。
分配内存的方式:CAS
与TLAB
两种。如果多线程并发创建,需要考虑同步问题(多个对象指向一个地方)。
CAS:一般使用
CAS
和失败重试保证原子性。TLAB
:按照线程分配不同空间(本地线程分配缓冲),只有TLAB
用完,需要分配新的才需要同步。是否使用该方式通过参数指定
解析,符号引用替代成直接引用
初始化
分配到的内存初始化为零(除了对象头)。这就是对象属性不需要初始化可以直接使用
设置对象头:什么类的对象,元数据,哈希码,对象GC分代年龄等信息。根据虚拟机运行状态,判断是否启用偏向锁
执行初始化方法:<init>。按照程序员指定的初始化过程初始化对象。这里就是执行初始化的过程
- 父类的静态初始化块
- 本类的静态初始化块
- 父类的初始化块
- 父类的构造方法
- 本类初始化块
- 本类的构造方法
以上是 对象创建的过程 的全部内容, 来源链接: utcz.com/z/515140.html