JVM(三):对象的创建过程是怎样的?
对象的创建过程中一般会包括以下几个步骤:
1):当虚拟机接收到一条new创建对象指令时,会先检查以下在常量池中是否能够找到这个对象的符号引用。
2):判断这个类是否被虚拟机加载,解析和初始化。
3):在堆中为这个对象分配空间,分配空间的方式有以下2种:
a.指针碰撞: 包含开辟空间跟移动指针2个步骤
b.空闲列表:包含开辟空间跟修改空闲列表2 个步骤
以上2中分配空间的方式会导致非原子操作带来的并发问题,所以在JVM中会通过CAS机制加上失败重试机制确保该操作的原子性
4):初始化分配的内存空间为0及类字段类型的默认值
5):设置对象的对象头相关数据(GC分代年龄,对象hashcode,元数据信息),对象结构包含以下3个部分:
a.对象头:存储了对象的元数据信息
b.实例数据:存储的是真实有效的数据,如各种字段内容
c.对齐填充:起到占位符作用
6):执行对象的init()方法