类加载器(Class Loader)是Java虚拟机(JVM)的一个重要组成部分,它负责将编译后的Java类文件加载到内存中,并生成对应的Java类对象。类加载器有三个主要层次结构:启动类加载器(Bootstrap Class Loader)、扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader)。
- 启动类加载器(Bootstrap Class Loader):
- 是JVM的内置类加载器,由C++实现,是JVM的一部分,不是Java类。
- 加载JRE核心类库(如rt.jar)等,位于%JAVA_HOME%/jre/lib目录下。
- 是最顶层的类加载器,没有父类加载器。
- 主要负责加载核心类库,提供最基础的功能支持。
- 扩展类加载器(Extension Class Loader):
- 是sun.misc.Launcher$ExtClassLoader类的实例,是Java类。
- 加载JRE的扩展目录(%JAVA_HOME%/jre/lib/ext)下的JAR包和类。
- 父类加载器为启动类加载器。
- 主要负责加载Java的一些扩展库。
- 应用程序类加载器(Application Class Loader):
- 是sun.misc.Launcher$AppClassLoader类的实例,是Java类。
- 加载应用程序classpath下的类,包括用户自定义类和第三方库。
- 父类加载器为扩展类加载器。
- 是大多数Java应用程序默认的类加载器。
在类加载过程中,类加载器采用双亲委派模型(Parent Delegation Model)来实现类的加载。当需要加载一个类时,首先会委派给父类加载器去尝试加载,只有当父类加载器无法加载时,才由当前类加载器去加载。这种模型的优势在于可以确保类的唯一性和安全性。
除了默认的三个类加载器外,还可以通过自定义类加载器来加载特定的类,满足特定的需求,比如从非标准的位置加载类文件、动态生成类等。
类加载器是Java虚拟机的重要组成部分,它可以根据不同的需求加载不同的类,使得Java应用程序具有更高的灵活性和可扩展性