JVM 双亲委派模型
一言以蔽之,向上委托,向下委派。
- 向上委托:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器。如果父类加载器可以完成类加载任务,就成功返回;(采用递归)
- 向下委派:倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。
案例 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 双亲委派模型相关推荐
- 分析JVM双亲委派模型的类加载源码 自定义类加载器
双亲委派模型下,在父类加载器无法加载的情况下再由当前类加载器去加载.具体的实现逻辑在java.util.ClassLoader抽象类的loadClass方法中.在该方法中,先检查是否已经加载过,如果没 ...
- jvm:类加载器与双亲委派模型
两个类相等需要类本身相等,并且使用同一个类加载器进行加载.这是因为每一个类加载器都拥有一个独立的类名称空间. 这里的相等,包括类的 Class 对象的 equals() 方法.isAssignable ...
- 【深入理解JVM】:类加载器与双亲委派模型
转载自 [深入理解JVM]:类加载器与双亲委派模型 类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段" ...
- 为什么要破坏JVM的双亲委派模型
本文来说下为什么要破坏JVM的双亲委派模型 文章目录 概述 双亲委派模型 破坏双亲委派模型 不使用Java SPI 使用Java SPI 自定义类加载器 为什么要自定义类加载器 ClassLoader ...
- 双亲委托类加载机制_图解JVM类加载机制和双亲委派模型
我们都知道以 .java 结尾的 Java 源文件,经过编译之后会变成 .class 结尾的字节码文件.JVM 通过类加载器来加载字节码文件,然后再执行程序. 什么时候加载一个类 那么,什么时候类加载 ...
- JVM 类加载器与双亲委派模型
1. 类加载器 我们知道,虚拟机在加载类的过程中需要使用类加载器进行加载,而在 Java 中,类加载器有很多,那么当 JVM 想要加载一个 .class 文件的时候,到底应该由哪个类加载器加载呢?这时 ...
- JVM原理系列--双亲委派模型
原文网址:JVM原理系列--双亲委派模型_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java虚拟机的双亲委派模型. 工作过程 说明 双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求, ...
- JVM 类加载机制及双亲委派模型
一 .整体的流程 Java 中的所有类,必须被装载到 jvm 中才能运行,这个装载工作是由 jvm 中的类加载器完成的,类加载器所做的工作实质是把类文件从硬盘读取到内存中,JVM 在加载类的时候,都是 ...
- JVM—类加载器和双亲委派模型
关注微信公众号:CodingTechWork,一起工作学习总结. 文章目录 引言 类加载器 类与类加载器关系 类加载器分类 启动类加载器 扩展类加载器 应用程序类加载器 双亲委派模型 介绍 工作流程 ...
最新文章
- JAVAOO 14 16章
- hdu 5339 Untitled【搜索】
- 在AngularJS控制器之间共享数据
- python解析数据包时出现问题_MySQL Connector / Python InterfaceError:“解析EOF数据包失败”...
- About the windchill Command -
- 前端学习(2587):权限控制的分类和意义
- Unity3D调用摄像头显示当前拍摄画面
- 信息学奥赛C++语言:语文成绩
- IHttpModule IHttpHandler
- 【转】js 获取浏览器高度和宽度值(多浏览器
- Matlab图形窗口大小的控制 ,plot窗口大小,figure大小,axis设置
- 黑苹果 惠普笔记本电池补丁_小米笔记本Pro 黑苹果 改装内置WIFI和蓝牙
- 金融行业数据仓库分层
- 苹果平板怎么卸载软件_石全石美软件更新,苹果安卓平板都能使用
- narwal机器人_Narwal云鲸智能扫拖机器人,值得托付的家庭卫生管家
- 晒一波程序员的桌面,逼格超级高!
- 关于静态变量的缺省值
- Git commit hook 规范标准配置
- 中国医师节丨华为IdeaHub用远程诊疗护佑人民健康,为医生减负
- 机器学习(周志华著)习题 第03章 线性模型
热门文章
- 批量修改图片大小软件easy image modifier plus绿色版下载
- 安卓开发使用mupdf实现pdf文件的预览
- 一阶线性微分方程的通解(以及伯努利形式的解)
- 从技术雷达看DevOps的十年 – 基础设施即代码和云计算
- FlexSlider.js——轮播
- 数据结构补习 --- malloc函数
- python处理csv百万数据-分分快3大小
- 下一代大数据系统和4S标准
- sp工具中最疼的是_阴阳师:sp青行灯会是一个强力打火机吗?简单进行技能猜测...
- airpods二代圆点按钮是啥_airpods后面的按钮是干嘛的