博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ClassLoader的双亲委派模型
阅读量:6967 次
发布时间:2019-06-27

本文共 1479 字,大约阅读时间需要 4 分钟。

类加载器用以实现类加载功能,并且确定被加载的类在Java虚拟机中的唯一性。

注意:由同一个类加载器加载,则这两个类相等,由不同的类加载器加载,则这两个类不相等。

我们知道类加载器主要分为:

  • 启动类加载器
  • 扩展类加载器
  • 应用程序类加载器

启动类加载器

负责加载以下类:

  • 存放在JAVA_HOME\lib目录中的类;
  • 被-Xbootclasspath参数所指定路径中、并且是被虚拟机识别的类库。

注意:启动类加载器不能直接被java程序直接饮用。

扩展类加载器

负责加载以下类:

  • JAVA_HOME\lib\ext目录中的类;
  • 被java.ext.dirs系统变量所指定的路径中的所有类。

注意:开发者可以直接使用扩展类加载器。

应用程序类加载器

负责加载用户类路径(classpath)上所指定的类库。

注意:该类加载器也被称为系统类加载器,开发者可以直接使用该类加载器。若开发者没有自定义类加载器,程序默认使用该类加载器。

各种类加载器并不是孤立的,而是互相配合使用。

在java虚拟机中,各种类加载器配合使用的模型就是双亲委派模型

双亲委派模型

双亲委派模型的工作流程全部在ClassLoader的loadClass()方法中执行:

@Override protected Class
loadClass(String name, boolean resolve) throws ClassNotFoundException { Class
c = findLoadedClass(name); // 检查需要加载的类是否已经被加载过 if (c == null) { try { // 若没有加载,则调用父加载器的loadClass()方法 if (parent != null) { c = parent.loadClass(name, false); }else{ // 若父类加载器为空,则默认使用启动类加载器作为父加载器 c=findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // 若父类加载器加载失败会抛出ClassNotFoundException, //说明父类加载器无法完成加载请求 } if(c==null){ // 在父类加载器无法加载时 // 再调用本身的findClass方法进行类加载 c=findClass(name); } } if(resolve){ resolveClass(c); } return c; }复制代码

若一个类加载器收到了类加载请求:

步骤:

  • 把该类加载请求委派给父加载器父完成,而不是自己去加载;(每层的类加载器都是如此,因此所有的类加载请求最终都会交由启动类加载器去加载)
  • 只用当父类加载器反馈自己无法完成该加载请求时,自加载器才会自己加载。

优点:

Java类随着它的类加载器一起具备了一种带优先级的层次关系。

转载地址:http://bfssl.baihongyu.com/

你可能感兴趣的文章
Codeforces Global Round 1 晕阙记
查看>>
Algs4-1.3.33一个双向队列Deque-双向链表实现
查看>>
Android 网络编程
查看>>
mysql启动和关闭外键约束的方法
查看>>
C#中的Dictionary字典类介绍
查看>>
在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView
查看>>
excel随机函数
查看>>
Android Studio的SVN Performing VCS Refresh/Commit 长时间不结束
查看>>
简单编写makefile文件,实现GCC4.9编译项目,增加boost库測试等等。。
查看>>
Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))...
查看>>
【一步步学OpenGL 20】 -《点光源》
查看>>
工作总结 获取html 标签 自定义属性值 根据html 自定义属性 获取 到标签...
查看>>
帧中继网络 (转)
查看>>
同步与异步 阻塞与非阻塞
查看>>
spring boot项目中处理Schedule定时任务
查看>>
最简单易懂的SpringCloudSleuth教程
查看>>
为什么可视化数据有一定的误差值?
查看>>
Android应用安全风险与防范
查看>>
硅谷亿万富翁彼得·泰尔的神秘大数据公司在新西兰遭审查
查看>>
参加工业软件与制造业融合发展高峰论坛 用友3.0加速落地
查看>>