双亲委派模型

  双亲委派模型

   先看图

    java自带三种类加载器, BootStrapClassLoader,ExtClassLoaer,AppClassLoader,

    其中BootStrapClassLoader是最高级,ExtClassLoader是BootStrapClassLoader的子加载器,AppClassLoader是ExtClassLoader的子加载器。

    BootStrapClassLoader 负责加载jdk下lib下的文件,

    ExtClassLoader负责加载Ext文件夹下的文件。

    AppClassLoader负责加载平常我们所写的类和引入的jar包中的类。

    

    所以,当我们写一个类,需要加载的时候,就使用到了java的双亲委派机制。

    首先AppClassLoader 类加载器向上查找缓存,看ExtClassLoader是否加载过此类,如果加载,则直接从缓存中取,如果没有,则ExtClassLoader再向上查询

    BootStrapClassLoader类加载器是否加载过此类,如果加载,则缓存中取,没有的话,则查询加载路径,有则加载返回,没有则推给ExtClassLoader查找加载  

     路径,有则加载返回,没有则推给AppClassLoader查询加载路径,加载返回。

      

    双亲委派模型的好处

    

    1 主要为了安全性,避免用户自己编写的类动态替换java的核心类,比如用户自己编写一个String类。

    2 同时也避免了类的重复加载,因为jvm中区分不同类,不仅仅根据类名,相同的class文件被不同的类加载器加载就是两个不同的类。

    

原文地址:https://www.cnblogs.com/hrlizhi/p/14639918.html