>本文详解了new一个对象时JVM的内部过程:首先进行类加载检查,然后在堆中分配内存并初始化(赋零值、设对象头),最后执行构造函数<init>()完成对象创建。 这是一个非常经典且核心的 JVM 问题。当我们在 Java 代码中写下 这样一行简单的代码时,JVM 内部经历了一个严谨而复杂的过程。 下面我将这个过程分解为几个关键步骤,并结合字节码和内存区域进行详细解释。 宏观流程概览 一个对象的过程可以概括为以下三大步: 1. 类加载检查与加载:确保要创建的对象的类已经被加载到内存中。 2. 对象内存分配:在堆内存中为新对象划分一块空间。 3. 对象初始化:对分配的内存进行初始化,包括设置对象头、为实例变量赋零值,并执行构造函数 。 --- 详细步骤分解 让我们以 为例,深入探讨每一步的细节。 第 1 步:类加载检查 (Class Loading Check) 当 JVM 遇到 指令时,它首先会执行以下检查: 1. 查找类的符号引用:JVM 会去运行时常量池中查找是否存在 类的符号引用。 2. 检查类是否已加载:检查这个符号引用代表的类是否已经被加载、解析和初始化过。 如果否 (类...