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