双亲委派机制_面试官:双亲委派机制的原理和作用是什么?
说到双亲委派机制,就必须要先要弄清楚Java的类加载器
什么是类加载器
Java类加载器(ClassLoader)是Java运行时环境(JRE)的一部分,负责动态的将Java类加载到Java虚拟机的内存空间。
类加载器有哪些
主要有三个:
- 引导类加载器(Bootstrap ClassLoader):加载Java的核心库(jre/lib/rt.jar),同时加载另外两种类加载器,由C++编写;
- 扩展类加载器(Extensions ClassLoader):加载Java的扩展库(jre/ext/*.jar);
- 应用类加载器(Application ClassLoader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。
除了上面三种外,我们还可以自定义类加载器,以方便我们的开发。
类加载器之间的关系
代码示例
上述代码的输出结果为:
结果输出
通过这段代码可以看出,我们日常编写的代码,是通过Application ClassLoader加载的,其父类是Extensions ClassLoader。实际上,Bootstrap ClassLoader也是Extensions ClassLoader的父类,但是因为Bootstrap ClassLoader是由C++编写的,在Java中无法获取,所以对外显示为null。
双亲委派机制
好了,上面做了那么多铺垫,终于来到了今天的重头戏:双亲委派机制!
双亲委派机制指的是,当某个特定的类加载器在收到类加载的请求时,会遵循下面的规则顺序:
- 首先判断被加载的类是否已经加载过,如果是则结束,否则会将加载任务委托给自己的父亲;
- 父类加载器在收到类加载的请求时,也会先判断被加载的类是否已经加载过,如果是则结束,否则同样将加载任务委托给自己的父亲
- 不断的循环进行步骤2,直到将加载任务委托给Bootstrap ClassLoader为止。此时,Bootstrap ClassLoader会先判断被加载的类是否已经加载过,如果是则结束;
请注意,到这里为止,都只是在转移加载任务的请求,下面将会进行类加载。
- Bootstrap ClassLoader会判断能否完成加载任务,如果能则直接加载,否则会将加载任务交给儿子类加载器;
- 儿子类加载器也会判断能否完成加载任务,如果能则直接加载,否则会再一次将加载任务交给儿子类加载器;
- 不断的循环进行步骤5,直到最后一个类加载器,如果这个类加载器仍然不能够加载这个类,就会抛出一个异常:ClassNotFoundException。
双亲委派机制下的类加载过程
双亲委派机制的好处是什么
- 首先,保证了java核心库的安全性。如果你也写了一个java.lang.String类,那么JVM只会按照上面的顺序加载jdk自带的String类,而不是你写的String类。
- 其次,还能保证同一个类不会被加载多次。
双亲委派机制_面试官:双亲委派机制的原理和作用是什么?相关推荐
- dubbo原理和机制_面试官几个 Dubbo 微服务框架问题,把我整懵了?
Dubbo本身并不复杂,而且官方文档写的非常清楚详细,面试中dubbo的问题一般不会很多,从分层到工作原理.负载均衡策略.容错机制.SPI机制基本就差不多了,最大的一道大题一般就是怎么设计一个RPC框 ...
- hashcode是什么意思_面试官:说一下HashMap原理,为什么会产生死循环
Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据.众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 JDK1.7 和 1.8 中具体实现稍有 ...
- smallint占用几个字节_面试官问我:Object o = new Object() 占用了多少个字节?
正文约: 2900字 预计阅读时间: 8分钟 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 moon不讲武德!!!一个类加载机制给面试官说蒙了!! 小小面试一下 前言蜜语 最近马师傅火的不要 ...
- 面试官:说一下HashMap原理,循环链表是如何产生的
Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据.众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 JDK1.7 和 1.8 中具体实现稍有 ...
- java 委托_面试官:java双亲委派机制及作用
什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类. 类加载器的类别 Bootst ...
- springboot 手动提交事务_面试官你都工作3年了,也做过5个项目了,怎么连事务机制都不会...
分享职场生活.职场攻略.程序员创业资源,为一线开发者提供优质内容 张工是一名java程序员,最近到某互联网公司面试,面试官问了这样一个问题: 有这样一个场景,需要往订单主表和明细表插入数据,如何保证订 ...
- jvm类加载机制_面试:对于JVM类加载机制深度解析
目录: 前文回顾 JVM在什么情况下会加载一个类? 从实用角度出发,来看看验证.准备和初始化的过程 核心阶段:初始化 类加载器和双亲委派机制 1.前文回顾 咱们今天先来回顾一下昨天讲到的JVM整体的一 ...
- mysql怎么用_面试官都是这样发问的,连环冲锋炮,看你怎么抵挡(上)
本内容来源于和尚 16 年毕业的学长,先在 58,后阿里,如今准备跳槽了,以下内容为他的最近面试经历 我最近从大厂离职之后在合肥呆了个把月,之前已经准备了半个多月,从7月底开始投简历面试,目前是jav ...
- qps是什么意思_面试官:说说你之前负责的系统,QPS 能达到多少?
被面试官经常问到之前开发的系统接口 QPS 能达到多少,经常给不出一个数值,支支吾吾,导致整体面试效果降低? 原因基本是一些公司中,做完功能测试就完了,压根不会有性能测试这一步,或者说并发量较少,没有 ...
最新文章
- flask 渲染 vue 打包后的dist文件(直接用后端渲染)
- Python几个函数的の测试
- 一张图搞定iOS学习路线
- OAuth(开放授权):(第三方)通过(授权)令牌(Access Token)访问用户数据
- Lync server 2010 发布拓扑错误0x80070005
- java如何找重复数字_Java如何找出数组中重复的数字
- 软件设计:表达组织中的上下级关系
- 一个人的命运决定于晚上8点到10点之间...
- 使用csscan评测字符集改变
- Java、JSP电子政务系统
- 人体姿态识别代码深度解析,带你一步步理解代码
- 毛星云opencv入门边缘检测Canny代码
- JAVA数据库访问控制框架设计与使用
- 批判性思维-思维遮蔽性
- 正弦波振荡的常见电路
- 搭建一个专属于两个人的爱情网站,记录生活中的点点滴滴
- Mac Pro硬盘清理,为啥我的系统占用如此之多的磁盘空间
- VMware16虚拟机:在Windows10系统下---安装VMware tools
- linux还原数据库报错,RMAN还原数据库报错问题解决案例
- 【精品盘点】2020年最受欢迎的6个知识库整理软件!
热门文章
- poj 3522 Slim Span
- 女人 这20种男人你永远不必等
- android支持色彩管理软件,安卓首家!OPPO全链路色彩管理系统亮相:全局支持10bit照片视频...
- html header文件格式类
- freeswitch源码编译windows_【Thrift】Windows编译Thrift源码及其依赖库
- 选购计算机五个原则,双十一笔记本电脑推荐
- Pytorch(七) --加载数据集
- [蓝桥杯][2017年第八届真题]小数第n位(数学)
- HFSS怎样在波导中显示多个模式
- golang func 入参为func_Golang函数常见用法