【jvm】双亲委派机制

devtools/2024/11/19 18:49:01/

目录

          • 1. 说明
          • 2. 类加载器层次结构
          • 3. 工作原理
          • 4. 主要作用
          • 5. 局限性
          • 6. 破坏双亲委派机制

1. 说明
  • 1.双亲委派机制(Parent Delegation Model)是Java类加载器的一种工作模式,它确保了类加载的一致性和安全性。
  • 2.双亲委派机制的基本思想是:当一个类加载器试图加载某个类时,它会先委托给其父类加载器,如果父类加载器无法加载,再由当前类加载器自己进行加载。
  • 3.这种层层委派的方式有助于保障类的唯一性,避免类的重复加载,并提高系统的安全性和稳定性。
2. 类加载器层次结构
  • 1.启动类加载器(Bootstrap Class Loader):负责加载Java的核心库,如java.lang.*等。它是最顶层的类加载器,通常由C++编写,不存在父类加载器。
  • 2.扩展类加载器(Extension Class Loader):负责加载Java的扩展库,一般位于<JAVA_HOME>/lib/ext目录下。它的父类加载器是启动类加载器(在实际逻辑中)。
  • 3.应用程序类加载器(Application Class Loader):也称为系统类加载器,负责加载应用程序类路径上指定的类库。它的父类加载器是扩展类加载器。
3. 工作原理
  • 1.检查缓存:类加载器首先检查是否已经加载过该类,如果已经加载过,则直接返回该类。
  • 2.委派父加载器:如果没有加载过该类,类加载器将加载请求委派给父类加载器。
  • 3.递归过程:父类加载器也按照相同的过程处理加载请求,直到委派到启动类加载器。
  • 4.启动类加载器加载:启动类加载器尝试加载类,如果加载成功,则返回该类。
  • 5.逐级回退:如果启动类加载器无法加载该类,加载请求逐级回退到下一级类加载器,直至回退到最初的请求者。
  • 6.自行加载:最终,如果所有父类加载器都无法加载该类,子类加载器才会尝试自行加载。
4. 主要作用
  • 1.保证类加载的安全性:由于双亲委派机制中,顶层的类加载器(如Bootstrap ClassLoader)负责加载核心类库,这种设计可以避免恶意代码替换核心类库,从而确保核心类库的完整性和安全性。
  • 2.避免重复加载:通过双亲委派机制,如果一个类已经被一个类加载器加载过,那么其他的类加载器就无需再次尝试加载,这样可以避免同一个类被多次加载的情况,节省内存并提高性能。
  • 3.保证类的一致性:双亲委派机制确保了同一个类在整个Java应用中只有一个唯一的定义,避免了同名类不同实现的冲突问题。
5. 局限性
  • 1.灵活性不足:双亲委派机制的严格层级关系使得子类加载器很难绕过父类加载器直接加载类,这在某些情况下限制了灵活性。
  • 2.复杂性:实现自定义类加载器时,需要理解和实现双亲委派机制,这增加了开发的复杂性。
6. 破坏双亲委派机制
  • 1.在某些特定需求下,可能需要破坏双亲委派机制,如加载自定义的类或版本不同的类库。
  • 2.这通常通过继承ClassLoader并覆盖loadClass方法或findClass方法来实现。
  • 3.破坏双亲委派机制可能会带来安全风险,因此需要谨慎操作。

http://www.ppmy.cn/devtools/135268.html

相关文章

【计网不挂科】计算机网络第六章<应用层 >习题库(含答案)

前言 大家好吖&#xff0c;欢迎来到 YY 滴计算机网络 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本博客主要内容&#xff0c;收纳了一部门基本的计算机网络题目&#xff0c;供yy应对期中考试复习。大家可以参考 本章为分章节的习题内容题库&#x…

chatGPT是如何使用tensrFlow训练模型的?

在训练像ChatGPT这样的大型语言模型时&#xff0c;TensorFlow的一些关键特性起到了至关重要的作用。以下是TensorFlow在训练ChatGPT过程中最关键的几个特性&#xff1a; ### 1. **动态计算图&#xff08;Eager Execution&#xff09;** - **灵活性**: TensorFlow 2.x 默认启用…

RabbitMQ常⻅⾯试题

1. MQ的作⽤及应⽤场景 类似问题: 项⽬什么场景下使⽤到了MQ, 为什么需要MQ RabbitMQ 的作⽤&#xff1f; 使⽤场景有哪些 RabbitMQ的主要应⽤场景 消息队列解耦应⽤程序的例⼦ 消息队列的应⽤场景 为什么说消息队列可以削峰 异步解耦: 在业务流程中, ⼀些操作可能⾮常耗时, 但…

Unity3D中管理Shader效果详解

前言 在Unity3D游戏开发中&#xff0c;寻路与导航是一个至关重要的功能&#xff0c;它能够使游戏角色自动找到最优路径&#xff0c;避开障碍物&#xff0c;实现自动导航&#xff0c;从而提升游戏体验。A*&#xff08;A Star&#xff09;算法作为一种广泛应用的寻路算法&#x…

【前端知识】nodejs项目配置package.json深入解读

package.json详细解读 文件解读一、文件结构二、字段详解三、使用场景四、注意事项 组件版本匹配规则 文件解读 package.json 文件是 Node.js 项目中的一个核心配置文件&#xff0c;它位于项目的根目录下&#xff0c;并包含项目的基本信息、依赖关系、脚本、版本等内容。以下是…

6.2 对角化矩阵(1)

一、对角化矩阵 当 x \boldsymbol x x 是 A A A 的一个特征值时&#xff0c;则 A A A 乘上 x \boldsymbol x x 就是一个数字 λ \lambda λ 乘 x \boldsymbol x x&#xff1a; A x λ x A\boldsymbol x\lambda \boldsymbol x Axλx&#xff0c;这样矩阵所带来的困难就不…

sql专场练习(二)(16-20)完结

第十六题 用户登录日志表为user_id,log_id,session_id,visit_time create table sql2_16(user_id int,log_id int,session_id int,visit_time string );没有数据 visit_time 时间格式为2024-11-15 用sql查询近30天每天平均登录用户数量 with t1 as (select visit_time,coun…

Prometheus结合K8s(二)使用

上一篇介绍了如何搭建 Prometheus结合K8s&#xff08;一&#xff09;搭建-CSDN博客&#xff0c;这章介绍使用 页面访问 kubectl get svc -n prom 看promeheus和granfana的端口访问页面 Prometheus 点击status—target&#xff0c;可以看到metrics的数据来源&#xff0c;即各…