jvm支持两种类型的类加载器:Bootstrap ClassLoader和User-Defined ClassLoader. 所有派生于抽象类ClassLoader的类加载器都是自定义类加载器。
程序中通常类加载器有三个:
- Bootstrap ClassLoader
- ExtClassLoader
- AppClassLoader
BootstrapClassLoader 启动类加载器,用c++语音编写嵌套在JVM内部,负责加载JAVA_HOME/lib目录中的类型,或者由 -Xbootclasspath指定路径下的所有类型。
ExtClassLoader和AppClassLoader派生于ClassLoader,由java语言编写,分别负责加载JAVA_HOME/lib/ext和 ClassPath目录中所有的类型
类加载器双亲委派模型:
自定义加载器把加载请求委派给它的父类加载器直至启动类加载器,由父类加载器负责加载,当父类加载器或启动类加载器无法完成时,再依次把任务传递下来,由低级别加载器负责加载。