双亲委派机制及作用

什么是双亲委派机制

  当`.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中的类的加载不会被我们自定义的干扰。

最新文章

  1. SQL日期格式,转自will哥
  2. json中$ref对象重复引用问题
  3. 如何判断js中对象的类型
  4. BASE64 官方方法,我自己用的,注意记住换行问题。
  5. DKNightVersion 的实现 --- 如何为 iOS 应用添加夜间模式
  6. php 修改、增加xml结点属性的实现代码
  7. 【linux】cut
  8. jquery 简单弹出层(转)
  9. 链表-Reverse Linked List II
  10. linux内核源码阅读之facebook硬盘加速flashcache之三
  11. Android网络电话软件Sipdroid试用
  12. POJ 1324 Holedox Moving 搜索
  13. hash冲突随笔
  14. 【一天一道LeetCode】#242. Valid Anagram
  15. 打开Visual Studio 2010,左下角显示正在从包...加载工具箱内容,卡住5、6秒!!!
  16. openflow控制器和交换机之间的消息
  17. SNMP mib文件说明
  18. LeetCode--032--最长有效括号(java)
  19. Https 单向验证 双向验证
  20. HTML 5 Web 本地存储

热门文章

  1. KVM虚拟化平台环境部署
  2. MATLAB学习1 之画图函数
  3. [软件共享]将数据库中的数据导出为SQL脚本
  4. PHP 面试题总结
  5. CF思维联系– Codeforces-987C - Three displays ( 动态规划)
  6. keras-深度学习处理文本数据
  7. TensorFlow实现时间序列预测
  8. 【漏洞预警】SaltStack远程命令执行漏洞 /tmp/salt-minions
  9. 面试之JS深拷贝的实现
  10. mui指南