JDK自带有三个类加载器:bootstrap ClassLoader、ExtClassLocader、AppClassLoader
1、BootStrapClassLoader是ExtClassLoader的父类加载器,负责加载%JAVA_HOME%/lib下的jar包和class文件
2、ExtClassLoader是AppClassLoader的父类加载器,负责加载%JAVA_HOME%/lib/ext下的jar包和class文件
3、AppClssLoader是自定义加载器的父类,负责加载classPath下的文件
双亲委派模型的好处
主要是为了安全,避免用户自己编写的类动态的替换了java核心类避免类的重复加载。在JVM中区分不同类,不仅仅是根据类名,相同的class文件被不同的ClassLoader加载就是不同的两个类
类加载的双亲委派模型
JVM在加载⼀个类时,会调⽤AppClassLoader的loadClass⽅法来加载这个类,不过在这个⽅法中,会先使⽤ExtClassLoader的loadClass⽅法来加载类,同样ExtClassLoader的loadClass⽅法中会先使⽤BootstrapClassLoader来加载类,如果BootstrapClassLoader加载到了就直接成功,如果BootstrapClassLoader没有加载到,那么ExtClassLoader就会⾃⼰尝试加载该类,如果没有加载到,那么则会AppClassLoader来加载这个类。
所以,双亲委派指得是,JVM在加载类时,会委派给父类加载器进⾏加载,如果没加载到才由⾃⼰进⾏加载