对象创建的过程

编程

  • 分配内存:类的准备阶段。类加载完成后就能确定对象分配多少内存。如果虚拟机具有Compact压缩功能(标记整理),就是用指针碰撞(记录头尾位置);如果只有标记清理的虚拟机,就是用空闲列表

  • 分配内存的方式:CASTLAB两种。如果多线程并发创建,需要考虑同步问题(多个对象指向一个地方)。

    • CAS:一般使用CAS和失败重试保证原子性。

    • TLAB:按照线程分配不同空间(本地线程分配缓冲),只有TLAB用完,需要分配新的才需要同步。是否使用该方式通过参数指定

    1. 解析,符号引用替代成直接引用

    2. 初始化

    • 分配到的内存初始化为零(除了对象头)。这就是对象属性不需要初始化可以直接使用

    • 设置对象头:什么类的对象,元数据,哈希码,对象GC分代年龄等信息。根据虚拟机运行状态,判断是否启用偏向锁

    • 执行初始化方法:<init>。按照程序员指定的初始化过程初始化对象。这里就是执行初始化的过程

      • 父类的静态初始化块
      • 本类的静态初始化块
      • 父类的初始化块
      • 父类的构造方法
      • 本类初始化块
      • 本类的构造方法

    以上是 对象创建的过程 的全部内容, 来源链接: utcz.com/z/515140.html

    回到顶部