类加载过程详解

类加载过程详解

类的生命周期

加载 → 验证 → 准备 → 解析 → 初始化 → 使用 → 卸载

加载阶段

  1. 通过类全名获取类的二进制字节流
  2. 将字节流转化为方法区数据结构
  3. 在堆中生成java.lang.Class对象

验证阶段

  • 文件格式验证
  • 元数据验证
  • 字节码验证
  • 符号引用验证

准备阶段

  • 分配内存
  • 初始化零值
  • 设置类变量初始值
1
2
// 准备阶段后 public static int value = 123; value = 0
// 初始化阶段后 value = 123

解析阶段

  • 将符号引用转为直接引用
  • 类或接口解析
  • 字段解析
  • 方法解析

初始化阶段

  • 执行()方法
  • 赋值static变量
  • 执行static代码块
1
2
3
4
5
public class Init {
static {
System.out.println("初始化");
}
}

类加载器

  • 启动类加载器(Bootstrap)
  • 扩展类加载器(Extension)
  • 应用类加载器(App)

总结

类加载是JVM运行时的基础,理解加载过程有助于解决类冲突和优化启动性能。