1,虚拟机遇到一条new指令首先将去检查这个指令的参数是否能在常量池中定义到一个类的符号引用。
2,并且检查这个符号引用代表的类是否被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。
3, 类加载检查通过后,虚拟机为新生对象分配内存。在Java堆中划分一块等同类大小的内存。
划分方法:碰撞指针或空闲列表法。
4,如果解决多线程情况下的对象创建问题。(TLAB,Thread Local Allocation Buffer) -XX: +/-UseTLAB
5,将分配到的内存空间都初始化为零值。
6,对对象进行必要的设置。(对象是哪个类的实例,如果能找到类的元数据信息,对象的哈希码,对象的GC分代年龄)
7,执行对象的init方法。
对象的生存还是死亡的判断
1,引用计数器法
2,可达性分析算法