首页 > 其他 > 详细

JVM_双亲委派机制

时间:2020-05-20 10:30:57      阅读:69      评论:0      收藏:0      [点我收藏+]

双亲委派机制及作用

什么是双亲委派机制

  当`.class`文件需要被加载时,它首先把这个任务委托给他的上级类加载器,层层往上委托,如果上级的类加载器没有加载过,自己才会去加载这个类。

源码分析

protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
        synchronized (getClassLoadingLock(name)) {
            // 首先,确保是个类是否已经被加载
            Class<?> c = findLoadedClass(name);
            if (c == null) {
                long t0 = System.nanoTime();
                try {
                    if (parent != null) {
						// 递归往上去验证
                        c = parent.loadClass(name, false);
                    } else {
                        //如果递归到了bootStrapClassloader了或者父类的加载器为空
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
                }

                if (c == null) {
                    // 如果双亲没有加载过,则自行加载
                    long t1 = System.nanoTime();
                    c = findClass(name);

                    sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                    sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                    sun.misc.PerfCounter.getFindClasses().increment();
                }
            }
            if (resolve) {
                resolveClass(c);
            }
            return c;
        }
    }

虚拟机自带的加载器以及优先级:

  1. bootstrap(根类加载器/引导类加载器,由C++编写)=> 加载 jre/lib/rt.jar 中的类
  2. ext(扩展类加载器)=> 加载 jre/lib/ext/ *.jar 中的类
  3. app(应用程序类加载器)=> 加载当前项目中classpath:下所有的类
  4. 用户自定义类加载器 => 定义类来继承ClassLoader抽象类,即 MyClassLoader extends ClassLoader

技术分享图片

来测试一下“双亲委派机制”的效果!

技术分享图片

分析:我自己创建了一个java.lang.String ,我在里面定义了main方法,并执行,但是结果却报错,说找不到这个方法。那么则意味着,JVM 中加载的Class文件,根本不是我自己定义的这个。

结论:执行方法,是从上(双亲)往下找,寻找双亲中,有没有这个类,JVM优先加载双亲中辈分较高的类加载器中的类。

作用:其目的,应该就是保护JDK中的类的加载不会被我们自定义的干扰。

JVM_双亲委派机制

原文:https://www.cnblogs.com/xitingfeng/p/12922073.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!