JVM(三):对象的创建过程是怎样的?

对象的创建过程中一般会包括以下几个步骤:

JVM(三):对象的创建过程是怎样的?

1):当虚拟机接收到一条new创建对象指令时,会先检查以下在常量池中是否能够找到这个对象的符号引用。

2):判断这个类是否被虚拟机加载,解析和初始化。

3):在堆中为这个对象分配空间,分配空间的方式有以下2种:

JVM(三):对象的创建过程是怎样的?

   a.指针碰撞: 包含开辟空间跟移动指针2个步骤

   b.空闲列表:包含开辟空间跟修改空闲列表2 个步骤

   以上2中分配空间的方式会导致非原子操作带来的并发问题,所以在JVM中会通过CAS机制加上失败重试机制确保该操作的原子性

4):初始化分配的内存空间为0及类字段类型的默认值

5):设置对象的对象头相关数据(GC分代年龄,对象hashcode,元数据信息),对象结构包含以下3个部分:

  a.对象头:存储了对象的元数据信息

  b.实例数据:存储的是真实有效的数据,如各种字段内容

  c.对齐填充:起到占位符作用

6):执行对象的init()方法