常量池中定位类的符号引用
↓
检查符号引用所代表的类是否已被加载,解析和初始化过 →
↓ ↓
分配内存(类加载完成后,内存需求确定) ← 加载
↓
根据java堆是否规整(GC方法)选择分配方法
↙ ↘
指针碰撞 空闲列表
↓
分配内存的并发保证(指针更新的原子性)
↙ ↘
CAS 失败重试 按照线程划分在不同的空间中进行TLAB -XX: UseTLAB -XX:-UseTLAB
↓
内存空间初始化为0值,保证对象的实例字段可以不赋初值就可以使用。
↓
设置对象头信息(Object Header):引用指针,元数据,hash值,GC分代年龄,锁相关
↓
执行对象<init>方法