1. 定位, 虚拟机遇到new指令,检查类在常量池中是否对应符号引用
2. 判断这个类是否已加载,解析和初始化
3. 为新生对象在java堆中分配内存空间
一 指针碰撞:分配内存空间包括开辟一块内存和移动指针,非原子步骤可能出现并发问题,java虚拟机采用CAS配上失败重试的方式保证更新操作的原子性
二 空闲列表:分配内存空间包括开辟一块内存和修改空闲列表,非原子步骤可能出现并发问题,java虚拟 机采用CAS配上失败重试的方式保证更新操作的原子性
4. 将分配到的内存空间都初始化为0值,如成员变量初始化, int为0, 字符串为“”
5. 设置对象头相关数据,GC分代年龄,对象的哈希码hashCode,元数据信息
6. 执行对象方法,如静态语句块
当虚拟机遇到`new`指令时,它会进行一系列操作,包括检查类是否已加载并初始化,然后在堆中分配内存,处理并发问题,如使用CAS确保分配的原子性。接着,内存空间会被初始化为默认值,设置对象头信息,如GC分代年龄和哈希码,并执行对象的初始化代码,如静态语句块。

被折叠的 条评论
为什么被折叠?



