双亲委派模型

双亲委派目的好处:

  1. 主要是为了安全性,避免用户自己写的类动态替换了Java的核心类,比如自己写了String替换了Java的String
  2. 同时避免了类的重复加载,JVM对于类的区分,不仅仅根据类名,不同的类加载器加载的相同class文件也是不同的两个类。

 

原理:

jdk中存在三个类加载器:BootStrapClassLoader、ExtClassLoade、AppClassLoader。

它们三个分别加载不同的路径的类,BootStrapClassLoader(顶级加载器)默认加载JAVA_HOME下lib中的jar和class,ExtClassLoade(扩展类加载器)默认加载lib下的ext中的jar和class,AppClassLoader(系统类加载器)负责加载classpath下的类文件,自己写的jar和引用jar都是由它加载。

类加载流程是系统类加载器加载类时,不会直接加载而是先向上委派查询扩展类加载器是否有缓存,有返回,无继续向上委派到顶级加载器执行同样过程,如果顶级类加载器也没有,则查找自己路径下有无该类,有返回,无则向下查找扩展类加载器执行同样操作,扩展类加载器也无的话,系统类加载器也执行同样操作,如果也无返回类找不到异常。

 

posted @ 2022-10-20 18:49  求道之愚者  阅读(30)  评论(0)    收藏  举报