创建对象的步骤

1. 判断对象对应的类是否被加载,链接,初始化

  虚拟机遇到一条new 指令,首先求检查这个和这个符号引用代表的类是否被加载,链接和初始化,即:判断类元信息是否存在)。如果没有,那么双亲委派机制模式下,使用当前类加载器以ClassLoader+包名+类名为key进行查找对应的.class文件。如果,没有查找到文件,则抛出ClassNotFoundException异常,如果找到,则加载,并生成对应的Class对象。

2.  为对象分配内存

  计算对象占用内存的大小(引用类型4个字节),接着在堆中划分一块内存给新对象

  - 如果内存完整----指针碰撞

  - 如果内存不完整----空闲列表分配(在K线列表找足够的内存)

3. 处理并发问题

  - 采用CAS失败重试,区域加锁保证更新原子性

  - TLAB(线程本地缓存区)

4. 初始化分配到的空间,即:默认初始化,保证对象在不赋值时可以直接使用

5. 设置对象的对象头(将对象的类信息(指向方法区),hashCode,GC信息,锁信息等他数据存储在对象头中)

6. 执行init方法进行初始化

原文地址:https://www.cnblogs.com/isalo/p/15499042.html