当前位置:首页>维修大全>综合>

类加载的5个过程详解(类加载器和双亲委派机制)

类加载的5个过程详解(类加载器和双亲委派机制)

更新时间:2024-04-10 13:38:45

类加载的5个过程详解

类加载是指将 Java 类的字节码文件加载到 JVM 中,并在内存中构建出 Java 类的原型(类模板对象)的过程。类加载的过程可以分为五个阶段:加载、验证、准备、解析、初始化。下面是每个阶段的详细解释:

1. 加载阶段:在该阶段,类加载器根据类的全名获取类的二进制数据流,并将其加载到内存中。类加载器可以根据不同的来源加载类,例如从本地文件系统、JAR 文件或网络中加载。

2. 验证阶段:在该阶段,验证字节码是否符合 JVM 规范,并且不会危害 JVM 的安全。如果验证失败,则会抛出 java.lang.VerifyError 异常。验证分为三个子阶段:文件格式验证、元数据验证和字节码验证。

3. 准备阶段:在该阶段,类加载器为类的静态变量分配内存,并将其初始化为默认值(0、null 等)。此外,准备阶段还包含了一些其他工作,例如解析类的常量池、为静态方法分配内存并设置初始值等。

4. 解析阶段:在该阶段,类加载器将类、接口、字段和方法的符号引用解析为实际引用。这个过程可能需要在运行时进行。解析阶段分为三个子阶段:字段解析、方法解析和接口解析。

5. 初始化阶段:在该阶段,静态变量被初始化,静态块被执行。如果初始化一个类时发生异常,则会抛出 java.lang.ExceptionInInitializerError 异常。初始化阶段是类加载过程中的最后一步。

关于这个问题,1. 加载(Loading):将类的二进制数据读入内存,并在方法区中创建一个表示该类的 Class 对象。

2. 验证(Verification):确保类的字节码符合 JVM 规范,并且不会危害 JVM 的安全。

3. 准备(Preparation):为类的静态变量分配内存,并设置初始值(默认值)。

4. 解析(Resolution):将类、接口、字段和方法的符号引用转换为直接引用。

5. 初始化(Initialization):执行类的初始化代码,包括静态变量的赋值和静态代码块的执行。

这些过程通常是按照顺序执行的,但是有些过程可能会在需要时延迟执行。例如,解析过程可能会在运行时延迟执行,直到引用的类被实际使用时才进行。此外,初始化过程只会执行一次,即使同一个类被多次加载。

更多栏目