当前位置: 首页 > article >正文

JVM-双亲委派机制

双亲委派机制定义

双亲委派机制指的是:当一个类加载器接收到加载类的任务时,会自底向上查找是否加载过,

再由顶向下进行加载

详细流程

每个类加载器都有一个父类加载器。父类加载器的关系如下,启动类加载器没有父类加载器,在类加载的过程中,每个类加载器都会先检查是否已经加载了该类,如果已经加载则直接返回,没有加载的话,会将加载请求委派给父类加载器。

案例1 

比如com.itheima.my.A假设在启动类加载器的加载目录中,而应用程序类加载器接到了加载类的任务。

1、自底向上依次判断,应用程序类加载器首先判断自己加载过没有,没有加载过就交给父类加载器 - 扩展类加载器。

 2、扩展类加载器也没加载过,再交给他的父类加载器 - 启动类加载器。

3、启动类加载器发现已经加载过,直接返回。

 案例2

B类在扩展类加载器加载路径中,同样应用程序类加载器接到了加载任务,按照案例1中的方式一层一层向上查找,发现都没有加载过。那么顶级类加载器启动类加载器会首先尝试加载。它发现这类不在它的加载目录中,向下传递给扩展类加载器。

 扩展类加载器发现这个类在它加载路径中,加载成功并返回。

 如果第二次再接收到加载任务,同样地向上查找。扩展类加载器发现已经加载过,就可以返回了

 双亲委派机制的作用

1.保证类加载的安全性。通过双亲委派机制避免恶意代码替换JDK中的核心类库,比如java.lang.String,确保核心类库的完整性和安全性。

2.避免重复加载。双亲委派机制可以避免同一个类被多次加载。

 指定加载类的类加载器

在Java中如何使用代码的方式去主动加载一个类呢?

方式1:使用Class.forName方法,即java反射机制,使用当前类的类加载器去加载指定的类。

方式2:获取到类加载器,通过类加载器的loadClass方法指定某个类加载器加载。

例如:

 面试题

1、如果一个类重复出现在三个类加载器的加载位置,应该由谁来加载?

启动类加载器加载,根据双亲委派机制,它的优先级是最高的

2、String类能覆盖吗,在自己的项目中去创建一个java.lang.String类,会被加载吗?

不能,会返回启动类加载器加载在rt.jar包中的String类。 

3、类的双亲委派机制是什么

  • 当一个类加载器去加载某个类的时候,会自底向上查找是否加载过,如果加载过就直接返回,如果一直到最顶层的类加载器都没有加载,再由顶向下进行加载。
  • 应用程序类加载器的父类加载器是扩展类加载器,扩展类加载器的父类加载器是启动类加载器。
  • 双亲委派机制的好处有两点:第一是避免恶意代码替换JDK中的核心类库,比如java.lang.String,确保核心类库的完整性和安全性。第二是避免一个类重复地被加载。


http://www.kler.cn/a/233855.html

相关文章:

  • Leecode热题100-35.搜索插入位置
  • 前端请求后端php接口跨域 cors问题
  • MoneyPrinterTurbo – 开源的AI短视频生成工具
  • 结构体是否包含特定类型的成员变量
  • POI实现根据PPTX模板渲染PPT
  • Kafka参数了解
  • 一步步建立一个C#项目(连续读取S7-1200PLC数据)
  • 监控概述、安装zabbix、配置zabbixagent、添加被控端主机、常用监控指标、自定义监控项
  • 2024年华为OD机试真题-密码解密-Java-OD统一考试(C卷)
  • 精灵图,字体图标,CSS3三角
  • css2复合选择器
  • 云计算市场分析
  • 深入探索MySQL的虚拟列:发展、原理与应用
  • 吉他学习:右手拨弦方法,右手拨弦训练 左手按弦方法
  • VSCode:替换空行
  • 【计算机网络】协议层次及其服务模型
  • 结构体的大小以及内存对齐问题
  • 搭建yum仓库服务器
  • C++ dfs 的状态表示(五十一)【第十一篇】
  • vue学习——集成sass
  • Ubuntu22.04 gnome-builder gnome C 应用程序习练笔记(三)
  • ideal打包,如何访问项目根目录的libs中的jar包
  • C++力扣题目494--目标和 474--一和零
  • 突破编程_C++_基础教程(类的高级特性)
  • 勒索病毒是什么,如何预防?
  • 鸿蒙开发-UI-图形-图片