一言以蔽之,向上委托,向下委派。

  • 向上委托:如果一个类加载器收到了类加载请求它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器。如果父类加载器可以完成类加载任务,就成功返回;(采用递归)
  • 向下委派:倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。

案例 1:加载 /jre/lib/resources.jar

我们知道 /jre/lib/resources.jar 是需要被启动(BootStrap)类加载器加载的核心类库,那么我们来看看它的加载流程图

  • 步骤 1:resources.jar 会先通过自定义类加载器(前提是我们实现了自定义类加载器),自定义类加载器不会做处理,直接向上委托给系统(System Application)类加载器;
  • 步骤 2:系统(System Application)类加载器接到委托后,也不做任何处理,直接向上委托给扩展(Extension)类加载器;
  • 步骤 3:扩展(Extension)类加载器接到委托后,也不做任何处理,直接向上委托给启动(Bootstrap)类加载器;
  • 步骤 4:启动(Bootstrap)类加载器接到委托后,发现 resources.jar 是自己负责加载的核心类库,于是进行加载,最后成功加载了 resources.jar。

案例 2:加载 /jre/lib/ext/cldrdata.jar

我们能够知道 /jre/lib/ext/cldrdata.jar 是需要被扩展(Extension)类加载器加载的核心类库,那么我们来看看它的加载流程图。

  • 步骤 1:cldrdata.jar 会先通过自定义类加载器(前提是我们实现了自定义类加载器),自定义类加载器不会做处理,直接向上委托给系统(System Application)类加载器;
  • 步骤 2:系统(System Application)类加载器接到委托后,也不做任何处理,直接向上委托给扩展(Extension)类加载器;
  • 步骤 3:扩展(Extension)类加载器接到委托后,也不做任何处理,直接向上委托给启动(Bootstrap)类加载器;
  • 步骤 4:启动(Bootstrap)类加载器接到委托后,发现 cldrdata.jar 不是自己负责加载的核心类库,于是进行向下委派,委派给扩展(Extension)类加载器;
  • 步骤 5:扩展(Extension)类加载器接到委派后,发现 cldrdata.jar 是自己负责加载的核心类库,于是进行加载,最后成功加载了 cldrdata.jar。

Tips:我们可以看到,在向上委托的过程中,cldrdata.jar 虽然在步骤 3 已经达到了扩展(Extension)类加载器,但是由于扩展(Extension)类加载器需要遵循向上委托的原则,必须要将 cldrdata.jar 向上委托给启动(Bootstrap)类加载器,直到启动(Bootstrap)类加载器向下委派 cldrdata.jar 到扩展(Extension)类加载器才进行类库的加载。

JVM 双亲委派模型相关推荐

  1. 分析JVM双亲委派模型的类加载源码 自定义类加载器

    双亲委派模型下,在父类加载器无法加载的情况下再由当前类加载器去加载.具体的实现逻辑在java.util.ClassLoader抽象类的loadClass方法中.在该方法中,先检查是否已经加载过,如果没 ...

  2. jvm:类加载器与双亲委派模型

    两个类相等需要类本身相等,并且使用同一个类加载器进行加载.这是因为每一个类加载器都拥有一个独立的类名称空间. 这里的相等,包括类的 Class 对象的 equals() 方法.isAssignable ...

  3. 【深入理解JVM】:类加载器与双亲委派模型

    转载自  [深入理解JVM]:类加载器与双亲委派模型 类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段" ...

  4. 为什么要破坏JVM的双亲委派模型

    本文来说下为什么要破坏JVM的双亲委派模型 文章目录 概述 双亲委派模型 破坏双亲委派模型 不使用Java SPI 使用Java SPI 自定义类加载器 为什么要自定义类加载器 ClassLoader ...

  5. 双亲委托类加载机制_图解JVM类加载机制和双亲委派模型

    我们都知道以 .java 结尾的 Java 源文件,经过编译之后会变成 .class 结尾的字节码文件.JVM 通过类加载器来加载字节码文件,然后再执行程序. 什么时候加载一个类 那么,什么时候类加载 ...

  6. JVM 类加载器与双亲委派模型

    1. 类加载器 我们知道,虚拟机在加载类的过程中需要使用类加载器进行加载,而在 Java 中,类加载器有很多,那么当 JVM 想要加载一个 .class 文件的时候,到底应该由哪个类加载器加载呢?这时 ...

  7. JVM原理系列--双亲委派模型

    原文网址:JVM原理系列--双亲委派模型_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java虚拟机的双亲委派模型. 工作过程 说明 双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求, ...

  8. JVM 类加载机制及双亲委派模型

    一 .整体的流程 Java 中的所有类,必须被装载到 jvm 中才能运行,这个装载工作是由 jvm 中的类加载器完成的,类加载器所做的工作实质是把类文件从硬盘读取到内存中,JVM 在加载类的时候,都是 ...

  9. JVM—类加载器和双亲委派模型

    关注微信公众号:CodingTechWork,一起工作学习总结. 文章目录 引言 类加载器 类与类加载器关系 类加载器分类 启动类加载器 扩展类加载器 应用程序类加载器 双亲委派模型 介绍 工作流程 ...

最新文章

  1. JAVAOO 14 16章
  2. hdu 5339 Untitled【搜索】
  3. 在AngularJS控制器之间共享数据
  4. python解析数据包时出现问题_MySQL Connector / Python InterfaceError:“解析EOF数据包失败”...
  5. About the windchill Command -
  6. 前端学习(2587):权限控制的分类和意义
  7. Unity3D调用摄像头显示当前拍摄画面
  8. 信息学奥赛C++语言:语文成绩
  9. IHttpModule IHttpHandler
  10. 【转】js 获取浏览器高度和宽度值(多浏览器
  11. Matlab图形窗口大小的控制 ,plot窗口大小,figure大小,axis设置
  12. 黑苹果 惠普笔记本电池补丁_小米笔记本Pro 黑苹果 改装内置WIFI和蓝牙
  13. 金融行业数据仓库分层
  14. 苹果平板怎么卸载软件_石全石美软件更新,苹果安卓平板都能使用
  15. narwal机器人_Narwal云鲸智能扫拖机器人,值得托付的家庭卫生管家
  16. 晒一波程序员的桌面,逼格超级高!
  17. 关于静态变量的缺省值
  18. Git commit hook 规范标准配置
  19. 中国医师节丨华为IdeaHub用远程诊疗护佑人民健康,为医生减负
  20. 机器学习(周志华著)习题 第03章 线性模型

热门文章

  1. 批量修改图片大小软件easy image modifier plus绿色版下载
  2. 安卓开发使用mupdf实现pdf文件的预览
  3. 一阶线性微分方程的通解(以及伯努利形式的解)
  4. 从技术雷达看DevOps的十年 – 基础设施即代码和云计算
  5. FlexSlider.js——轮播
  6. 数据结构补习 --- malloc函数
  7. python处理csv百万数据-分分快3大小
  8. 下一代大数据系统和4S标准
  9. sp工具中最疼的是_阴阳师:sp青行灯会是一个强力打火机吗?简单进行技能猜测...
  10. airpods二代圆点按钮是啥_airpods后面的按钮是干嘛的