美文网首页
类记载器和双亲委派机制

类记载器和双亲委派机制

作者: salix_ | 来源:发表于2020-04-08 15:02 被阅读0次

    一:类加载器分类

    1. 系统类加载器(用c++写的)

    • Boootstrap ClassLoader是唯一的系统类加载器,嵌套在JVM内部。
    • 用来加载String、Integer等核心类库,包含java,javax,sun等开头的类。
    • 用来加载扩展类记载其ExtClassLoder,AppClassLoader。

    2. 自定义类加载器(用java写的)

    1. 定义:派生于ClassLoader类的类加载器。
    2. 自定义类是AppClassLoader加载的(包括一些外部导入的jar包),AppClassLoader的父加载器是ExtClassLoader(补充BootStrap Classlodaer加载扩展的类库,jre/lib/ext下面的包等等)。ExtClassLoader的父加载器是Boootstrap ClassLoader。

    二:双亲委派机制

    AppClassLoader的父加载器是ExtClassLoader。ExtClassLoader的父加载器是Boootstrap ClassLoader。他们并不是java中的extends关系,而是我们自己规定的等级,谁是谁的父亲,所谓双亲委派机制(又叫坑爹机制),爸爸能干的活自己绝对不干,直接任务往上派发。

    有啥用?
    1. 避免类的重复加载
    2. 安全啊,比如我在主目录下建立一个java.lang.String的自定义类(注意跟java库中的报名是一样的哦),然后我们new我们自己定义的String,会发现其实new的还是java库中的类。如果java机制是new了我们自己定义的类。那你写项目的时候,我趁你不注意,偷偷自己实现一个盗版的String放到你的项目上(在java库String上加点bug),你会不会崩溃?
      AppClassLoader可以引入,就给父亲,ExtClassLoader也可以搞就继续往上传,BootStrap ClassLoader也可以加载(并且它没有父亲了),它就只能自己弄了(造福子孙,孩子们少干点),就避免了AppClassLoader(用来加载自定义类)加载自定义类产生安全问题。

    相关文章

      网友评论

          本文标题:类记载器和双亲委派机制

          本文链接:https://www.haomeiwen.com/subject/kzrtmhtx.html