说到双亲委派机制,就必须要先要弄清楚Java的类加载器

什么是类加载器

Java类加载器(ClassLoader)是Java运行时环境(JRE)的一部分,负责动态的将Java类加载到Java虚拟机的内存空间。

类加载器有哪些

主要有三个:

  1. 引导类加载器(Bootstrap ClassLoader):加载Java的核心库(jre/lib/rt.jar),同时加载另外两种类加载器,由C++编写;
  2. 扩展类加载器(Extensions ClassLoader):加载Java的扩展库(jre/ext/*.jar);
  3. 应用类加载器(Application ClassLoader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。

除了上面三种外,我们还可以自定义类加载器,以方便我们的开发。

类加载器之间的关系

代码示例

上述代码的输出结果为:

结果输出

通过这段代码可以看出,我们日常编写的代码,是通过Application ClassLoader加载的,其父类是Extensions ClassLoader。实际上,Bootstrap ClassLoader也是Extensions ClassLoader的父类,但是因为Bootstrap ClassLoader是由C++编写的,在Java中无法获取,所以对外显示为null。

双亲委派机制

好了,上面做了那么多铺垫,终于来到了今天的重头戏:双亲委派机制!

双亲委派机制指的是,当某个特定的类加载器在收到类加载的请求时,会遵循下面的规则顺序:

  1. 首先判断被加载的类是否已经加载过,如果是则结束,否则会将加载任务委托给自己的父亲;
  2. 父类加载器在收到类加载的请求时,也会先判断被加载的类是否已经加载过,如果是则结束,否则同样将加载任务委托给自己的父亲
  3. 不断的循环进行步骤2,直到将加载任务委托给Bootstrap ClassLoader为止。此时,Bootstrap ClassLoader会先判断被加载的类是否已经加载过,如果是则结束;

请注意,到这里为止,都只是在转移加载任务的请求,下面将会进行类加载。

  1. Bootstrap ClassLoader会判断能否完成加载任务,如果能则直接加载,否则会将加载任务交给儿子类加载器;
  2. 儿子类加载器也会判断能否完成加载任务,如果能则直接加载,否则会再一次将加载任务交给儿子类加载器;
  3. 不断的循环进行步骤5,直到最后一个类加载器,如果这个类加载器仍然不能够加载这个类,就会抛出一个异常:ClassNotFoundException。

双亲委派机制下的类加载过程

双亲委派机制的好处是什么

  1. 首先,保证了java核心库的安全性。如果你也写了一个java.lang.String类,那么JVM只会按照上面的顺序加载jdk自带的String类,而不是你写的String类。
  2. 其次,还能保证同一个类不会被加载多次。

双亲委派机制_面试官:双亲委派机制的原理和作用是什么?相关推荐

  1. dubbo原理和机制_面试官几个 Dubbo 微服务框架问题,把我整懵了?

    Dubbo本身并不复杂,而且官方文档写的非常清楚详细,面试中dubbo的问题一般不会很多,从分层到工作原理.负载均衡策略.容错机制.SPI机制基本就差不多了,最大的一道大题一般就是怎么设计一个RPC框 ...

  2. hashcode是什么意思_面试官:说一下HashMap原理,为什么会产生死循环

    Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据.众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 JDK1.7 和 1.8 中具体实现稍有 ...

  3. smallint占用几个字节_面试官问我:Object o = new Object() 占用了多少个字节?

    正文约: 2900字 预计阅读时间: 8分钟 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 moon不讲武德!!!一个类加载机制给面试官说蒙了!! 小小面试一下 前言蜜语 最近马师傅火的不要 ...

  4. 面试官:说一下HashMap原理,循环链表是如何产生的

    Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据.众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 JDK1.7 和 1.8 中具体实现稍有 ...

  5. java 委托_面试官:java双亲委派机制及作用

    什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类. 类加载器的类别 Bootst ...

  6. springboot 手动提交事务_面试官你都工作3年了,也做过5个项目了,怎么连事务机制都不会...

    分享职场生活.职场攻略.程序员创业资源,为一线开发者提供优质内容 张工是一名java程序员,最近到某互联网公司面试,面试官问了这样一个问题: 有这样一个场景,需要往订单主表和明细表插入数据,如何保证订 ...

  7. jvm类加载机制_面试:对于JVM类加载机制深度解析

    目录: 前文回顾 JVM在什么情况下会加载一个类? 从实用角度出发,来看看验证.准备和初始化的过程 核心阶段:初始化 类加载器和双亲委派机制 1.前文回顾 咱们今天先来回顾一下昨天讲到的JVM整体的一 ...

  8. mysql怎么用_面试官都是这样发问的,连环冲锋炮,看你怎么抵挡(上)

    本内容来源于和尚 16 年毕业的学长,先在 58,后阿里,如今准备跳槽了,以下内容为他的最近面试经历 我最近从大厂离职之后在合肥呆了个把月,之前已经准备了半个多月,从7月底开始投简历面试,目前是jav ...

  9. qps是什么意思_面试官:说说你之前负责的系统,QPS 能达到多少?

    被面试官经常问到之前开发的系统接口 QPS 能达到多少,经常给不出一个数值,支支吾吾,导致整体面试效果降低? 原因基本是一些公司中,做完功能测试就完了,压根不会有性能测试这一步,或者说并发量较少,没有 ...

最新文章

  1. flask 渲染 vue 打包后的dist文件(直接用后端渲染)
  2. Python几个函数的の测试
  3. 一张图搞定iOS学习路线
  4. OAuth(开放授权):(第三方)通过(授权)令牌(Access Token)访问用户数据
  5. Lync server 2010 发布拓扑错误0x80070005
  6. java如何找重复数字_Java如何找出数组中重复的数字
  7. 软件设计:表达组织中的上下级关系
  8. 一个人的命运决定于晚上8点到10点之间...
  9. 使用csscan评测字符集改变
  10. Java、JSP电子政务系统
  11. 人体姿态识别代码深度解析,带你一步步理解代码
  12. 毛星云opencv入门边缘检测Canny代码
  13. JAVA数据库访问控制框架设计与使用
  14. 批判性思维-思维遮蔽性
  15. 正弦波振荡的常见电路
  16. 搭建一个专属于两个人的爱情网站,记录生活中的点点滴滴
  17. Mac Pro硬盘清理,为啥我的系统占用如此之多的磁盘空间
  18. VMware16虚拟机:在Windows10系统下---安装VMware tools
  19. linux还原数据库报错,RMAN还原数据库报错问题解决案例
  20. 【精品盘点】2020年最受欢迎的6个知识库整理软件!

热门文章

  1. poj 3522 Slim Span
  2. 女人 这20种男人你永远不必等
  3. android支持色彩管理软件,安卓首家!OPPO全链路色彩管理系统亮相:全局支持10bit照片视频...
  4. html header文件格式类
  5. freeswitch源码编译windows_【Thrift】Windows编译Thrift源码及其依赖库
  6. 选购计算机五个原则,双十一笔记本电脑推荐
  7. Pytorch(七) --加载数据集
  8. [蓝桥杯][2017年第八届真题]小数第n位(数学)
  9. HFSS怎样在波导中显示多个模式
  10. golang func 入参为func_Golang函数常见用法