jvm之对象创建过程

118 阅读1分钟

常量池中定位类的符号引用

               ↓

检查符号引用所代表的类是否已被加载,解析和初始化过  → 

               ↓                          ↓

分配内存(类加载完成后,内存需求确定)      ←       加载  

               ↓

根据java堆是否规整(GC方法)选择分配方法

            ↙ ↘

 指针碰撞    空闲列表

               ↓

分配内存的并发保证(指针更新的原子性)

                     ↙ ↘

CAS+失败重试 按照线程划分在不同的空间中进行TLAB -XX:+UseTLAB -XX:-UseTLAB

               ↓

内存空间初始化为0值,保证对象的实例字段可以不赋初值就可以使用。

               ↓

设置对象头信息(Object Header):引用指针,元数据,hash值,GC分代年龄,锁相关

               ↓

执行对象<init>方法