在 JVM 中主要有以下几种类加载器:
一、启动类加载器(Bootstrap ClassLoader)
-
作用:
- 负责加载 JVM 自身需要的核心类库,这些类库主要是 Java 安装目录下的
jre/lib
目录中的类。 - 例如,加载 Java 的核心类库如
java.lang
包下的类,包括Object
、String
等。
- 负责加载 JVM 自身需要的核心类库,这些类库主要是 Java 安装目录下的
-
特点:
- 由 C/C++ 语言实现,在 Java 中无法直接获取到启动类加载器的引用。
- 是最顶层的类加载器,它没有父类加载器。
二、扩展类加载器(Extension ClassLoader)
-
作用:
- 负责加载 Java 的扩展类库,这些类库位于 Java 安装目录下的
jre/lib/ext
目录或者由系统变量java.ext.dirs
指定的目录中。 - 例如,加载一些第三方的扩展库或者自定义的扩展类。
- 负责加载 Java 的扩展类库,这些类库位于 Java 安装目录下的
-
特点:
- 由 Java 语言实现,它的父类加载器是启动类加载器。
三、应用程序类加载器(Application ClassLoader)
-
作用:
- 也称为系统类加载器,负责加载应用程序的类路径(classpath)下的类。
- 通常是我们开发的 Java 应用程序中的类都由这个类加载器加载。
-
特点:
- 由 Java 语言实现,它的父类加载器是扩展类加载器。
除了这三个主要的类加载器外,用户还可以自定义类加载器,用于实现特定的类加载逻辑,比如从特定的网络位置、数据库或者加密存储中加载类。自定义类加载器通过继承 java.lang.ClassLoader
类来实现。