类加载器双亲委派模式

news/2024/7/8 7:10:55

双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。

双亲委派机制:
1、当 AppClassLoader加载一个class时,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器ExtClassLoader去完成。

2、当 ExtClassLoader加载一个class时,它首先也不会自己去尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader```去完成。

3、如果 BootStrapClassLoader加载失败(例如在 $JAVA_HOME/jre/lib里未查找到该class),会使用 ExtClassLoader来尝试加载;

4、若ExtClassLoader也加载失败,则会使用 AppClassLoader来加载,如果 AppClassLoader也加载失败,则会报出异常 ClassNotFoundException。

双亲委派模式的意义:
1、系统类防止内存中出现多份同样的字节码
2、保证java程序安全稳定运行
源码解读:

  public Class<?> loadClass(String name) throws ClassNotFoundException {return loadClass(name, false);}
protected synchronized Class<?> loadClass(String name, boolean resolve)throws ClassNotFoundException {// First, check if the class has already been loaded// 首先判断该类型是否已经被加载Class c = findLoadedClass(name);if (c == null) {//如果没有被加载,就委托给父类加载或者委派给启动类加载器加载try {if (parent != null) {//如果存在父类加载器,就委派给父类加载器加载c = parent.loadClass(name, false);} else {//如果不存在父类加载器,就检查是否是由启动类加载器加载的类,//通过调用本地方法native Class findBootstrapClass(String name)c = findBootstrapClassOrNull(name);}} catch (ClassNotFoundException e) {// ClassNotFoundException thrown if class not found// from the non-null parent class loader }if (c == null) {// If still not found, then invoke findClass in order// to find the class.// 如果父类加载器和启动类加载器都不能完成加载任务,才调用自身的加载功能c = findClass(name);}}if (resolve) {resolveClass(c);}return c;}

 

转载于:https://www.cnblogs.com/cherish010/p/8568386.html


http://lihuaxi.xjx100.cn/news/257593.html

相关文章

如何每天自动备份 SourceSafe (转)

在Microsoft Visual SourceSafe中提到管理员应该每天或者至少每周备份一次SourceSafe中的内容。这里&#xff0c;我们利用现有的工具实现每天自动备份SourceSafe中的内容。<?XML:NAMESPACE PREFIX O />1. 用到的工具a. ssarc.exe. ssarc.exe是随着SourceSafe提供…

PHP下载/采集远程图片到本地

2019独角兽企业重金招聘Python工程师标准>>> PHP下载/采集远程图片到本地01 /** 02* 下载远程图片到本地 03* 04* param string $url 远程文件地址 05* param string $filename 保存后的文件名&#xff08;为空时则为随机生成的文件名&#xff0c;否则为原文件名&am…

Redis 缓存使用技巧和设计方案

欢迎关注方志朋的博客&#xff0c;回复”666“获面试宝典缓存能够有效地加速应用的读写速度&#xff0c;同时也可以降低后端负载&#xff0c;对日常应用的开发至关重要。下面会介绍缓存使用技巧和设计方案&#xff0c;包含如下内容&#xff1a;缓存的收益和成本分析、缓存更新策…

《C#精彩实例教程》小组阅读02 – Visual Studio简介与安装

本图文详细介绍了什么是Visual Studio&#xff0c;以及Visual Studio的安装过程。 上一次我们介绍了Visual Studio 2015的下载&#xff0c;以及MSDN。 这一次&#xff0c;我们说说什么是Visual Studio以及如何安装。 Visual Studio&#xff08;简称VS&#xff09;是微软公司…

Imagination 推新款GPU IP,首次实现桌面级光线追踪效果

游戏界被炒得最热的概念可能就是光线追踪技术了&#xff0c;不仅仅是PC端的游戏。光线追踪所展示出来的画面效果也确实惊艳&#xff0c;可以让我们感叹到图像技术达到的一个新高度。 但是实际上&#xff0c;光线追踪并不是一个新技术。10年前&#xff0c;光追就是游戏玩家茶余…

万字解读:预训练模型最新综述!

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习&#xff0c;不错过Datawhale学术 作者&#xff1a;太子长琴&#xff0c;Datawhale意向成员如何在有限数据下训练出高效的深度学习模型&#xff1f;本文深入研究了预训练的前世今生&#xff0c;并带领读者一起…

免费DIY!微软一口气开源1500个3D表情包,超可爱

‍‍视学算法报道 编辑&#xff1a;Joey 桃子【导读】1500多种3D表情&#xff0c;随意DIY。表情包可以说是信息时代最伟大的发明之一了。任何场景&#xff0c;任何心情&#xff0c;一个简单的emoji就能表达你的情绪&#xff0c;让沟通更高效。有了表情包&#xff0c;是不是比一…

whoosh学习(1)

2019独角兽企业重金招聘Python工程师标准>>> 背景 当前项目需要用到全文搜索redis不方便实现mysql效率太低搜索引擎选择 pylucenewhoosh&#xff08;似乎更受欢迎&#xff0c;文档最全&#xff09;为什么选择 纯python实现&#xff0c;省了编译二进制包的繁琐过程。…