woieha320r的博客

构造实例对象

编译器会将new编译为两条指令:new、invokespecial

jvm处理new指令

· 拿到class的符号引用,若未加载过,执行类加载过程

· 在堆中分配内存:方式取决于具体实现(指针碰撞、空闲列表记录),这个行为是“原子”的。空间需容纳所有父类的非static字段和本类的所有字段

· 把除“对象头”(hash码、锁指针、class指针(非句柄方式访问对象,否则class指针在句柄中,如图)…)的空间初始化为零值

句柄池 直接引用

jvm处理invokespecial指令

执行编译器生成的“实例构造函数()”,即:调用父类构造、执行代码中的声明时赋值和构造方法