类加载检查过程

191 阅读1分钟

类加载检查过程:

  1. 定位符号引用: 当虚拟机遇到 new 指令时,首先会检查指令的参数,即要创建的对象的类的符号引用。这个符号引用包含了类的全限定名(类名)。

  2. 检查类是否已加载: 虚拟机会检查这个符号引用所代表的类是否已经被加载过。如果没有加载,那么需要先执行类加载过程。

  3. 类加载过程:

    • 加载(Loading): 将类的二进制数据读入内存,并生成代表这个类的 Class 对象。

    • 连接(Linking): 这一阶段包括三个步骤:验证、准备、解析。

      • 验证(Verification): 确保加载的类符合 Java 虚拟机规范,不会造成虚拟机的错误。
      • 准备(Preparation): 为类的静态变量分配内存,并设置默认初始值。
      • 解析(Resolution): 将类、接口、字段和方法的符号引用解析为直接引用。
    • 初始化(Initialization): 对类进行初始化,执行类构造器 <clinit> 方法,静态变量赋值等。

  4. 完成类加载检查: 当类加载、连接和初始化都完成后,虚拟机会认为这个类的加载检查已经通过。

总体来说,类加载检查确保在使用 new 指令创建对象之前,相应的类已经被加载、连接和初始化。这个过程是 Java 虚拟机保证类的正确加载和初始化的基础。