Bootstrap类加载器

启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,没有父类,是虚拟机自身的一部分,他负责将/lib 路径下的核心类库 或 -Xbootclasspath 参数指定的路径下的 jar 包加载到内存中,注意由于虚拟机是按照文件名识别加载 jar 包的,如 rt.jar ,如果文件名不被虚拟机识别,即使把 jar 包丢到 lib 目录下也是没有作用的(出于安全考虑,Bootstrap启动类加载器只加载包名为 java / javax / sun等开头)

Extention 类加载器

扩展类加载器是指 Sun 公司实现的 sun.misc.Launcher$ExtClassLoader 类,由 Java 语言实现的, 父类加载器为 null , 是Launcher 的静态内部类, 它负责加载 /lib/ext 目录下 或 由系统变量 -Djava.ext.dir 指定位路径中的类库,开发者可以直接使用标准扩展加载器。

Application 类加载器

应用程序加载器是指 Sun 公司实现的 sun.misc.Launcher$AppClassLoader 。 父类加载器为 ExtClassLoader ,它负责加载 系统类路径 java -classpath 或 -D java.class.path 指定路径下的类库,也就是我们经常用的 classpath 路径,开发者可以直接使用系统类加载器,一般情况下该类加载是程序中默认的类加载器,通过ClassLoader#getSystemClassLoader() 方法可以获取到该类加载器

Custom 自定义类加载器

应用程序可以自定义类加载器,父类加载器为 AppClassLoader
image.png