双亲委派机制

发布时间:2024年01月07日

上一篇博客中我们说了java中有多个类加载器,分别加载各自负责的类。但是这样出现一个问题,如果各自负责的类加载器中有重复的类?这时候怎么办? 让它被不同的类加载器加载多次?? 显然是不合理的


双亲委派机制的核心就是解决一个类到底由谁加载,且不会被重复加载。
双亲委派机制设计的很巧妙,首先要明确最核心的一点:类加载器之间不是平等的,但是逻辑上的父子关系(不是继承) 如图:

在这里插入图片描述
当一个类被加载的时候 JVM先会判断:

  • 这个类是不是已经被加载过了?加载过了就直接返回加载的class对象,不需要再加载第二次
  • 如果没有被加载过?那么哪个类加载器来搞定它?

这个就是双亲委派机制的核心:

  • 先向上依次查找这个类是不是已经被加载过了,比如java.lang.String是启动类加载器加载的, 你自己也写了一个String类,那么它向上查找的时候发现启动类已经加载过了 就不会在加载了,避免重名重复加载
  • 如果一个类没有被加载过 那么就自顶向下 一层层尝试加载,所谓尝试就是每一层看一下能不能加载 能加载就在这一层处理了 ,不能那就往下一层抛(这个设计思想有点类似异常处理,一个异常抛出来 看当前层面能不能catch 能就处理 不能就往上抛)
文章来源:https://blog.csdn.net/weixin_43966468/article/details/135437557
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。