阶段 |
描述 |
---|
加载 |
将二进制类文件读入内存并创建一个类对象。
|
验证 |
检查字节码是否符合 Java 虚拟机规范。
|
准备 |
为静态变量分配内存并初始化默认值。
|
解析 |
将类中的符号引用替换为直接引用,例如将对字段和方法的引用替换为指向实际字段和方法的指针。
|
初始化 |
执行类中的静态初始化器,并为实例变量分配内存并设置初始值。
|
专业角度介绍
Java 虚拟机 (JVM) 使用类加载器机制加载类。
类加载器负责查找和加载二进制类文件,并将其转化为 JVM 可以执行的格式。
类加载过程分为5 个阶段:
加载:将类文件读入内存并创建类对象,但此时还不会初始化类中的字段和方法。
验证:检查类文件是否符合 JVM 规范,包括是否损坏、是否包含非法字节码指令等。
准备:为静态字段分配内存并初始化为默认值 (0、null 等)。
解析:将类中的符号引用(指向字段、方法等的引用)替换为直接引用,以便 JVM 可以在运行时快速访问这些成员。
初始化:执行类中的静态初始化器,并为实例字段分配内存并初始化为初始值。
类加载顺序由类加载器的类型决定。
Bootstrap 类加载器加载 Java 核心库,扩展类加载器加载扩展库,系统类加载器加载应用程序的类路径。
类加载器按照父委派模型工作,即一个类加载器会将类加载委托给其父加载器,以此类推。
只有当父加载器无法加载类时,子加载器才会尝试加载。
Java 类加载机制提供了以下优点:
安全:类加载器可以防止加载未经授权的类。
隔离:不同的类加载器可以加载不同的类版本,从而实现代码隔离。
性能:类加载器可以缓存已加载的类,以提高性能。
可扩展性:可以创建自定义类加载器来实现自定义类加载机制。