双亲委派模型

一、为什么要用这种模型

保证相同的字节码文件不被重复加载

二、利用双亲委派模型加载类的过程

双亲委派模型_第1张图片
摘自参考文献1.png

java.lang.ClassLoader.getClassLoader()代码片段

protected synchronized Class loadClass(String name,boolean resolve){
        // 看自己有没有加载过该类
        Class c=findLoadedClass(name);
        // 未加载过
        if(c==null){
            try{
                // 有父亲:则将请求委派给父亲完成
                if(parent!=null){
                    c=parent.loadClass(name,false);
                }esle{
                    // 没父亲:默认使用启动类加载器作为父加载器
                    c=findBootstrapClassOrNull(name);
                }
            }catch(ClassNotFoundException e){
                // 父类加载器抛出ClassNotFoundException,说明父类加载器无法完成加载请求
            }
            if(c==null){
                // 父类加载器无法加载时:调用自身的findClass()来加载
                c=findClass(name);
            }
        }else{
            // 加载过
            if(resolve){
                resolveClass(c);
            }
        }
        return c;
        
    }

这是一个递归调用过程。
若“某类加载器”收到某个类加载请求

双亲委派模型_第2张图片
代码逻辑.png

三、JVM中如何判断两个类是相同的

  1. 类名相同
  2. 由同一个类加载器加载

参考文献

1.【深入理解JVM】:类加载器与双亲委派模型

你可能感兴趣的:(双亲委派模型)