对象创建的过程
通过符号引用定位到类是否被加载。没有就加载类。执行类加载与验证的过程 分配内存:类的准备阶段。类加载完成后就能确定对象分配多少内存。如果虚拟机具有 Compact 压缩功能(标记整理),就是用 指针碰撞 (记录头尾位置);如果只有 标记清理 的虚拟机,就是用 空闲列表 。 分配内存的方式: CAS 与 TLAB 两种。如果多线程并发创建,需要考虑同步问题(多个对象指向一个地方)。 CAS:一般使用 CAS 和失败重试保证原子性。 TLAB :按照线程分配不同空间(本地线程分配缓冲),只有 TLAB 用完,需要分配新的才需要同步。是否使用该方式通过参数指定 解析,符号引用替代成直接引用 初始化 分配到的内存初始化为零(除了对象头)。这就是对象属性不需要初始化可以直接使用 设置对象头:什么类的对象,元数据,哈希码,对象GC分代年龄等信息。根据虚拟机运行状态,判断是否启用偏向锁 执行初始化方法:<init>。按照程序员指定的初始化过程初始化对象。这里就是执行初始化的过程 父类的静态初始化块 本类的静态初始化块 父类的初始化块 父类的构造方法 本类初始化块 本类的构造方法 来源: oschina 链接: https://my.oschina.net/u/3870422/blog/3220397