类加载检查过程:
-
定位符号引用: 当虚拟机遇到
new指令时,首先会检查指令的参数,即要创建的对象的类的符号引用。这个符号引用包含了类的全限定名(类名)。 -
检查类是否已加载: 虚拟机会检查这个符号引用所代表的类是否已经被加载过。如果没有加载,那么需要先执行类加载过程。
-
类加载过程:
-
加载(Loading): 将类的二进制数据读入内存,并生成代表这个类的
Class对象。 -
连接(Linking): 这一阶段包括三个步骤:验证、准备、解析。
- 验证(Verification): 确保加载的类符合 Java 虚拟机规范,不会造成虚拟机的错误。
- 准备(Preparation): 为类的静态变量分配内存,并设置默认初始值。
- 解析(Resolution): 将类、接口、字段和方法的符号引用解析为直接引用。
-
初始化(Initialization): 对类进行初始化,执行类构造器
<clinit>方法,静态变量赋值等。
-
-
完成类加载检查: 当类加载、连接和初始化都完成后,虚拟机会认为这个类的加载检查已经通过。
总体来说,类加载检查确保在使用 new 指令创建对象之前,相应的类已经被加载、连接和初始化。这个过程是 Java 虚拟机保证类的正确加载和初始化的基础。