JVM类加载机制-启动类、扩展类、应用程序类加载器创建过程
- 在Launcher中可以看到,里面有AppClassLoader和ExtClassLoader,没有BootstrapClassLoader,但是有一个BootClassPathHolder

启动类加载器
- 启动类加载器由C++实现,主要加载核心类库(%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等)。


- 由C++底层代码实现。所以当查看String的加载类时,会显示Null

扩展类加载器
- 扩展类加载器是应用类加载器的父类加载器,初始化时,读取目录%JRE_HOME%\lib\ext目录下的jar包和class文件后创建。
在创建扩展类加载器时,使用了双重检测锁DCL



- 从上面2张图可以看到,ExtClassLoader extends URLClassLoader,传入的parent参数是null,所以说ExtClassLoader没有父类加载器。
应用类加载器
- 应用类加载器就是加载我们自己写的类文件。从下图可以看到,AppClassLoader也是继承了URLClassLoader,但和ExtClassLoader不同的是读取路径变成了java.class.path。

- 当我们自定义的类没有指定父类加载器时,为什么默认AppClassLoader作为其父类加载器呢?答案在下面这句代码里。
