2024-10-26
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/4500783613

回答

Java 对象的创建过程分为 5 个步骤:

  1. 类加载检查:在创建对象之前,JVM 需求确保该对象的类已经加载并且被初始化了。
  2. 分配内存:类加载检查通过后,JVM 就会为新建的对象分配内存。对象所需的内存大小在类加载阶段就已经知道了。
  3. 初始化零值:在为对象分配内存后,JVM 会自动将这块内存初始化为零值,比如数值类型初始化为 0,引用类型初始化为 null
  4. 设置对象头:每个对象都需要知道它的类型信息,因此 JVM 会为每个对象设置对象头信息。对象头包含两部分内容,第一部分是用于存储对象自身的运行时数据,如hashcode、GC分代年龄、锁状态标志、线程持有的锁等;第二部分是类型指针,指向它对应的类元数据,JVM 用这个确定其属于哪个类的实例。
  5. 调用构造方法:最后一步,JVM 会通过 new 指令调用对象的构造方法。

详解

类加载检查

在创建对象之前,JVM 需要确保该对象的类已经完成了加载。在这个过程中,JVM 会去检查这个类是否在常量池中能定位都一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和完成初始化。如果没有,则先执行类的加载流程。

关于类加载流程请阅读面试题:你知道类的生命周期吗?

为什么在创建对象时,要有一个这样的检查呢?主要是因为类的加载,通常都是懒加载,只有当使用类的时候才会加载

分配内存