当前位置: 首页 > 编程日记 > 正文

类加载器双亲委派模式

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

双亲委派机制:
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

相关文章:

Kubernetes 架构(下)【转】

上一节我们讨论了 Kubernetes 架构 Master 上运行的服务&#xff0c;本节讨论 Node 节点。 Node 是 Pod 运行的地方&#xff0c;Kubernetes 支持 Docker、rkt 等容器 Runtime。 Node上运行的 Kubernetes 组件有 kubelet、kube-proxy 和 Pod 网络&#xff08;例如 flannel&#…

【工具软件】Xmind的使用

1、打开历史保存的记录的方法 窗口 - 文本编辑历史 - 恢复 2、批量修改 编辑 - 查找/替换 3、如果子主体很多,而且有文本格式的&#xff0c;可以直接选中父父主题复制粘贴 4、窗口 - 黑匣子 自己做的脑图系统会自动备份。 5、常用快捷键 &#xff08;1&#xff09;创建子主…

小脚本,统计一个目录下满足特定条件文件的代码行数

find -regex .*cc -o -regex .*h | xargs wc -lfind也自带了执行命令的方法&#xff1a;find -regex .*cc -o -regex .*h -exec wc -l {} \; 这种方法的结果不太对&#xff0c;只能统计到满足 -regex .*h 的文件注明一下&#xff1a; find默认从当前目录递归的查找&#xff1b…

CCNA CCNP CCIE所有实验名称完整版

只能仅供参考了&#xff01;具体的实验内容就没了&#xff0c;失望了&#xff01;实验1&#xff1a;通过Console端口访问Cisco路由器  实验2&#xff1a;通过Telnet访问Cisco路由器  实验3&#xff1a;配置终端服务器  实验4&#xff1a;通过浏览器访问路由器  实验5&#…

Real World Haskell 第七章 I/O

几乎所有程序都是用来从外部世界收集数据&#xff0c;处理数据&#xff0c;并把处理结果返回给外部世界的。也就是说&#xff0c;输入和输出对于程序设计来说相当关键。Haskell的I/O系统很强大&#xff0c;表达能力很强也很容易使用&#xff0c;理解它的原理对于学习Haskell来说…

malloc函数分配失败处理的严重性

本次在实际测试情况下&#xff0c;发现程序无缘无故的异常&#xff0c;导致看门狗超时复位&#xff0c;经过排查是malloc函数分配失败的时候&#xff0c;依然对指针进行了操作&#xff0c;导致异常。以前没重视这个问题是因为&#xff0c;总觉的malloc基本都会成功的&#xff0…

kvm--virsh命令行下管理虚拟机

virsh 既有命令行模式&#xff0c;也有交互模式&#xff0c;在命令行直接输入 virsh 就进入交互模式&#xff0c; virsh 后面跟命令参数&#xff0c;则是命令行模式&#xff1b; &#xff08;1&#xff09;基础操作 --- 命令行下管理虚拟机 virsh list 列出当前宿…

【java】兴唐第十八节课

1、java接口的关键字&#xff1a;implements,可实现多个接口&#xff0c;接口接口之间使用逗号分隔。 注&#xff1a; 继承只能继承一个&#xff0c;接口可以实现多个 2、在接口里所有的方法都是抽象方法&#xff0c;不用关键字abstract修饰。 3、接口不能定义变量&#xff0…

转换前台javascript传递过来的时间字符串到.net的DateTime

javascript: var datenew Date().toString();得到的结果类似于:Wed Oct 27 2010 08:53:04 GMT0800 如何在C#中把这个字符串转换为DateTime类型呢&#xff1f;DateTime.ParseExact("Wed Oct 27 16:23:44 UTC0800 2010","ddd MMM dd HH:mm:ss UTCzzzzz yyyy"…

树状数组 | 1057

用哈希&#xff0c;把push的数x作为下标给hashTable&#xff08;实则不存在&#xff0c;直接用tree树状数组记录数据&#xff09;1&#xff0c;pop则是以最后一个数x作为下标-1 。 树状数组和其原理不再赘述&#xff0c;需要注意的是最后的二分搜索&#xff08;实则是lower_bou…

7、vue中将token存到cookie

使用js-cookie工具&#xff1a; 1.npm i js-cookie //安装2.import Cookies from js-cookie //引用 // 存入cookie&#xff1a;Cookies.set(token,value) // 获取cookie&#xff1a;Cookies.set(token) //删除cookie:Cookies.remove(token)转载于:https://www.cnblogs.com/xlfd…

MySQL数据库表名、列名、别名区分大小写的问题

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的&#xff1a; 1、数据库名与表名是严格区分大小写的&#xff1b; 2、表的别名是严格区分大小写的&#xff1b; 3、列名与列的别名在所有的情况下均是忽略大小写的&#xff1b; 4、变量名也是严格区分大小写的&#…

【java】兴唐第十七节课

1、抽象类&#xff1a; 概念:由abstract修饰的类叫抽象类。 特征&#xff1a;在抽象类中有抽象方法 注意&#xff1a; &#xff08;1&#xff09;抽象方法必须定义到抽象类中&#xff0c;即有抽象方法的类一定是抽象类。抽象类的非抽象子类必须实现父类的抽象方法&#xff0c…

条款22: 尽量用“传引用”而不用“传值”

c语言中&#xff0c;什么都是通过传值来实现的&#xff0c;c继承了这一传统并将它作为默认方式。除非明确指定&#xff0c;函数的形参总是通过“实参的拷贝”来初始化的&#xff0c;函数的调用者得到的也是函数返回值的拷贝。正如我在本书的导言中所指出的&#xff0c;“通过值…

C++ RCSP智能指针简单实现与应用

智能指针的实现代码来源博客&#xff1a;《http://blog.csdn.net/to_be_better/article/details/53570910》 修改&#xff1a;添加 get()函数&#xff0c;用以获得原始指针&#xff08;raw pointer&#xff09;。 其余思路来源《Effective C》 智能指针的实现代码如下&#xff…

末学者笔记--openstack共享组件:rabbitmq(3)

openstack共享组件&#xff1a;消息队列rabbitmq 一、MQ 全称为 Message Queue, 消息队列&#xff08; MQ &#xff09; 是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息&#xff08;针对应用程序的数据&#xff09;来通信&#xf…

【matlab】2019.5.10第一节上机课练习

1、计算角度和弧度的方法 例 a 17&#xff0c;b 24&#xff0c;c 26 求一个角分别以角度和弧度的方式给出 解&#xff1a; %//用余弦定理求出余弦值 pos (a b c)/(2*a*b) %//用acos求出弧度值 angle acos(pos)%//求出角度值realangle angle*180/pi2、创建矩阵的方法 A…

【学习笔记】Silverlight框架:Jounce(4)——事件通信

Prism、CM和Jounce里都有各自的事件通信机制&#xff0c;也都叫EventAggregator。 相比于Prism&#xff0c;Jounce里的EventAggregator的风格更接近CM。当然作者也是这么说的&#xff1a;The pattern here is based on the lightweight version Rob Eisenburg introduced with …

10个最常用 Windows Vista运行命令

Windows Vista以其华丽的界面和全新的操作方式受到大众喜爱&#xff0c;但实际上&#xff0c;如果你善于使用“运行”命令&#xff0c;仍然可以大大简化操作&#xff0c;甚至是发现一些常规菜单里没有的功能的。 下面就给大家讲讲Windows Vista下面的一些工具命令&#xff0c;你…

非常好的博客网站

下面的内容是转载的&#xff0c; 原文&#xff1a; https://klionsec.github.io/archives/ http://www.leifc.com/ ------------------------------------------------------------------------------ 个人始终坚信,所有不以实际入侵和防御为目的的安全研究都是耍流氓 [ 目…

反向代理Nginx

引用&#xff1a;https://baijiahao.baidu.com/s?id1600687025749463237&wfrspider&forpc 参考下图&#xff0c;正向代理用途&#xff1a;Client无法直接访问Server&#xff0c;比如谷歌FQ&#xff0c;于是请求发送给代理&#xff0c;代理可以访问Server并将其返回信息…

asp.net mvc3 Razor引擎中@使用规则小记

项目中前台用的是asp.net mvc3&#xff0c;Razor引擎&#xff08;关于Razor的介绍可以参考&#xff1a;http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx&#xff09;&#xff0c;深深体验到了Razor引擎的方便强大。但在编码过程中也遇到了一些问题&…

【matlab】第二章基本使用方法

&#xff08;一&#xff09;操作练习 1、整型数据类型的定义 代码实现 x int8(50)2、创建一个复数 代码实现&#xff1a; //情况1 complex(2); //输出结果&#xff1a; ans 1.0000 0.0000i//情况2 complex(1,2);//输出结果&#xff1a; ans 1.0000 2.0000i//情况3a compl…

一位美国前辈工程师的十大职业发展忠告

1、好好规划自己的路&#xff0c;不要跟着感觉走&#xff01;根据个人的理想决策安排&#xff0c;绝大部分人并不指望成为什么院士或教授&#xff0c;而是希望活得滋润一些&#xff0c;爽一些。那么&#xff0c;就需要慎重安排自己的轨迹。从哪个行业入手&#xff0c;逐渐对该行…

Vagrant安装指南

ubuntu的易用性很高&#xff0c;安装很简单&#xff0c;颜值也高&#xff0c;但是我工作中经常使用centos&#xff0c;我希望我的笔记本也是centos&#xff0c;但是&#xff0c;centos颜值太低&#xff0c;配置文件很复杂&#xff0c;不想弄这个太麻烦&#xff0c;于是&#xf…

树状数组的理解(前缀和 and 差分)

二更—— 有神仙反映数星星那个题外链炸了&#xff0c;我决定把图给你们粘一下&#xff0c;汉语翻译的话在一本通提高篇的树状数组那一章里有&#xff0c;同时也修改了一些汉语语法的错误 这段时间学了线段树组&#xff0c;当神仙们都在学kmp和hash的时候&#xff0c;我这个蒟蒻…

【java】兴唐第十九节课(内部类)

内部类&#xff1a;在类的内部定义的类叫内部类 1、有名内部类&#xff1a; &#xff08;1&#xff09;实例化时必须先实例化外部对象&#xff0c;格式&#xff1a; 外部类.内部类 对象名 外部类对象名.new.内部类名&#xff08;&#xff09;&#xff1b; 代码实现&#xff1…

持续集成之“自动化部署”

转自&#xff1a;http://www.infoq.com/cn/news/2011/07/ci-automatic-deployment 在前文《依赖管理》中&#xff0c;我们讨论了如何在代码变得庞大&#xff0c;组件增多的情况下&#xff0c;做好外部库和内部组件依赖管理&#xff0c;从而提高构建效率。可以应用的实践包括&am…

1008: [HNOI2008]越狱(计数问题)

1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11361 Solved: 4914[Submit][Status][Discuss]Description 监狱有连续编号为1...N的N个房间&#xff0c;每个房间关押一个犯人&#xff0c;有M种宗教&#xff0c;每个犯人可能信仰其中一种。如果相邻房间…

他山之石:Github的使用

一.awesome 关键字 搜索和关键字匹配的优秀项目 awesome springboot 搜索优秀的springboot相关的项目&#xff0c;包括框架、教程等 二.通过in关键词限制搜索范围 xxx in:name 项目名包含xxx的 xxx in:description 项目描述包含xxx的 xxx in:readme 项目的readme文件中包含x…