类加载器是 Java 虚拟机的一个重要组成部分,它负责将类的字节码加载到内存中,并生成对应的 java.lang.Class 对象。类加载器在运行时动态地加载、连接和初始化类,使得 Java 程序能够在运行时根据需要加载不同的类。
一、类加载器的主要作用
- 加载类的字节码:从各种来源(如文件系统、网络等)读取类的字节码文件,并将其转换为内存中的数据结构。
- 连接类:包括验证、准备和解析三个阶段。验证确保字节码的正确性和安全性;准备阶段为类变量分配内存并设置初始值;解析阶段将符号引用转换为直接引用。
- 初始化类:执行类的初始化方法
<clinit>,对类变量进行赋值和执行静态代码块。
二、类加载器的种类
-
启动类加载器(Bootstrap ClassLoader):
- 它是 Java 虚拟机内置的类加载器,通常由 C/C++ 实现,负责加载 JAVA_HOME/lib 目录下的核心类库,如
rt.jar、resources.jar等。 - 启动类加载器无法被 Java 程序直接引用。
- 它是 Java 虚拟机内置的类加载器,通常由 C/C++ 实现,负责加载 JAVA_HOME/lib 目录下的核心类库,如
-
扩展类加载器(Extension ClassLoader):
- 它负责加载 Java 平台的扩展类库,位于 JAVA_HOME/lib/ext 目录下。
- 扩展类加载器是用 Java 语言实现的,并且它的父加载器是启动类加载器。
-
应用程序类加载器(Application ClassLoader):
- 也称为系统类加载器,它负责加载应用程序的类路径(classpath)下的类。
- 应用程序类加载器是用 Java 语言实现的,它的父加载器是扩展类加载器。
三、自定义类加载器
除了上述三种内置的类加载器外,开发人员还可以根据需要实现自定义类加载器。自定义类加载器可以实现以下功能:
- 实现特殊的类加载策略,例如从数据库、网络或加密存储中加载类。
- 加载特定版本的类,实现热部署等功能。
- 对加载的类进行加密和解密,增强安全性。

5935

被折叠的 条评论
为什么被折叠?



