JVM在运行时身成三个classloader:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader。这些classloader是用来载入本地已知的类库。
Bootstrap
这是用C/C++写死在JVM里了,JVM启动时建立的第一个classloader,负责载入核心类库(jre/lib/*.jar)。
Extension ClassLoader
由Bootstrap生成该类,parent定为null(Bootstrap不是java写的,当然只能指定null),负责载入jre/lib/ext中的类。
AppClassLoader
由Bootstrap生成该类,parent定为Extension ClassLoader,负责载入classpath(环境变量)中指定的类库。
其他
在其他一些情况下,比如事先没有加入环境变量的类库,或者从其他一些地方获取class比如网络,利用上面的classloader就不能寻找到指定类。这时候就需要扩展classloader,给定class文件的准确位置,这样java应用程序才能找到class文件。