跳到主要内容

1 篇博文 含有标签「JVM」

查看所有标签

类加载过程

类加载过程是指在 Java 程序运行时,将类的字节码文件加载到内存中并转换为 Class 对象的过程。Java 类加载器负责加载类,其主要任务是在运行时查找和装载类文件,以生成对应的 Class 对象

Java 的类加载过程一般可以分为以下几个步骤:

  1. 加载(Loading):通过类的全定限名来获取其二进制字节流,一般来自文件、网络等,加载阶段完成后,系统内存中就有了该类的 Class 对象的数据结构表示
  2. 验证(Verification):确保被加载的类的正确性,主要包括文件格式验证、元数据验证、字节码验证、符号引用验证等
  3. 准备(Preparation):为类的静态变量分配内存并设置初始值(零值)
  4. 解析(Resolution):将符号引用转换为直接引用的过程,主要包括将类、接口、字段和方法的符号引用解析为直接引用
  5. 初始化(Initialization):执行类的初始化方法(<clinit>),初始化类的静态变量和静态代码块,这是类加载的最后一个阶段

双亲委派模型

双亲委派模型(Parent Delegation Model)是 Java 类加载机制的一种重要实现形式,它基于一个简单的原则:当一个类加载器收到类加载的请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器去完成。这个过程是递归的,一直向上委托,直至顶层的启动类加载器。只有当父类加载器无法完成加载请求时,子类加载器才会尝试加载

双亲委派模型的好处在于它能够保证 Java 核心库的类不会被自定义的类加载器所替代,从而确保 Java 核心库的安全性和一致性。这种机制也有助于防止类的重复加载,提供系统的整体性能

JVM阅读需 2 分钟