JVM的神秘力量:类加载器揭秘

发表时间: 2023-12-26 15:47

Java虚拟机(JVM)中的类加载器(Class Loader)是一种重要的机制,负责加载Java字节码文件(.class文件)到JVM中,并为这些类的实例化提供运行时环境。以下是对JVM中类加载器的详细描述:

JAVA类加载器

工作流程

  • 加载(Loading)

(1)类加载器负责从文件系统、网络或其他来源读取Java类的二进制数据。

(2)它将这些数据转换为java.lang.Class类的实例。

  • 链接(Linking)

(1)验证(Verification):确保加载的类符合JVM规范,不会对JVM造成安全风险

(2) 准备(Preparation):为类的静态字段分配内存,并设置默认初始值。

(3) 解析(Resolution):将类中的符号引用替换为直接引用。

  • 初始化(Initialization)

(1)执行静态初始化块和静态字段的初始化。

类加载器的类型

引导类加载器(Bootstrap Class Loader)

  • 是JVM实现的一部分,用C++编写,不是Java类。
  • 负责加载JVM基本组件所需的核心类库,如java.lang.*。

扩展类加载器(Extension Class Loader)

  • 加载JDK扩展目录(jre/lib/ext)中的类。
  • 这些扩展类通常是提供给JVM使用的,不是由用户编写的。

系统类加载器(System Class Loader)

  • 也称为应用程序类加载器。
  • 它加载环境变量classpath或系统属性java.class.path指定路径下的类库。

双亲委派模型(Parent Delegation Model)

  • JVM的类加载器通常遵循双亲委派模型。
  • 在这个模型中,类加载器在尝试加载类时,首先会将加载任务委托给其父类加载器。
  • 只有当父类加载器无法加载请求的类时,子类加载器才会尝试加载该类。
  • 这种模型有助于保持Java平台的稳定性和安全性,因为它确保了核心库的类不会被覆盖或篡改。


双亲委派机制

功能和重要性

  • 类加载器在Java安全模型中扮演着关键角色,因为它们确定了类的命名空间。
  • 它们还支持Java的运行时环境动态地扩展和更新。

JVM的类加载器是实现Java应用程序灵活性和扩展性的基础,同时也确保了运行时环境的安全和稳定。