双亲委派目的好处:
- 主要是为了安全性,避免用户自己写的类动态替换了Java的核心类,比如自己写了String替换了Java的String
- 同时避免了类的重复加载,JVM对于类的区分,不仅仅根据类名,不同的类加载器加载的相同class文件也是不同的两个类。
原理:
jdk中存在三个类加载器:BootStrapClassLoader、ExtClassLoade、AppClassLoader。
它们三个分别加载不同的路径的类,BootStrapClassLoader(顶级加载器)默认加载JAVA_HOME下lib中的jar和class,ExtClassLoade(扩展类加载器)默认加载lib下的ext中的jar和class,AppClassLoader(系统类加载器)负责加载classpath下的类文件,自己写的jar和引用jar都是由它加载。
类加载流程是系统类加载器加载类时,不会直接加载而是先向上委派查询扩展类加载器是否有缓存,有返回,无继续向上委派到顶级加载器执行同样过程,如果顶级类加载器也没有,则查找自己路径下有无该类,有返回,无则向下查找扩展类加载器执行同样操作,扩展类加载器也无的话,系统类加载器也执行同样操作,如果也无返回类找不到异常。
标签:委派,扩展,模型,jar,双亲,class,加载 From: https://www.cnblogs.com/blanset/p/16810913.html