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

【JAVA基础】JVM双亲委派

JVM双亲委派

  • 双亲委派机制
  • 为什么进行双亲委派?
  • 为什么要设计这种机制?

双亲委派机制

双亲委派是一个孩子向父亲方向,然后父亲向孩子方向的双亲委派过程

总结:自下(从 App 开始)而上进行检查,自上而下进行加载。

双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝
试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都
应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,
即无法完成该加载,子加载器才会尝试自己去加载该类。

双亲委派机制

  • ➢ 当 AppClassLoader 加载一个 class 时,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器 ExtClassLoader 去完成。
  • ➢ 当 ExtClassLoader 加载一个 class 时,它首先也不会自己去尝试加载这个类,而是把类加载请求委派给 BootStrapClassLoader 去完成。
  • ➢ 如果 BootStrapClassLoader 加载失败(例如在 $JAVA_HOME/jre/lib 里未查找到该 class),会使用 ExtClassLoader 来尝试加载;
  • ➢ 若 ExtClassLoader 也加载失败,则会使用 AppClassLoader 来加载,如果 AppClassLoader 也加载失败,则会报出异常 ClassNotFoundException。

为什么进行双亲委派?

双亲委派机制的好处主要有以下几点:

  • ➢ 避免类的重复加载:在 JVM 中,每个类都由一个唯一的全限定名和一个对应的类加载器确
    定,类加载器根据全限定名和类路径来确定类的位置。因此,在一个 JVM 实例中,如果有
    两个类加载器分别加载了同一个类,JVM 会认为这两个类是不同的,从而导致类型转换异
    常等问题。通过双亲委派机制,父类加载器在加载类之前会先委托给自己的父类加载器去加
    载,从而保证一个类在 JVM 中只会有一份,并且由其父类加载器所加载。
  • ➢ 安全性考虑:Java 核心类库(如 java.lang 包下的类)都是由启动类加载器加载的,其他的类都是由其它类加载器加载的。这样,我们就可以保证 Java 核心类库的安全性,因为不
    同的应用程序无法改变这些类的实现。另外,也可以在类加载过程中做一些安全性检查。
  • ➢ 模块化开发:在实际应用中,我们经常需要在一个程序中使用多个第三方库,这些库可能会
    存在同名类。如果使用了双亲委派机制,就可以保证不同的类加载器只会加载自己的类,从
    而避免了类名冲突的问题。

为什么要设计这种机制?

这种设计有个好处是,如果有人想替换系统级别的类:String.java。篡改它的实现,在这种
机制下这些系统的类已经被 Bootstrap classLoader 加载过了(为什么?因为当一个类需要加载
的时候,最先去尝试加载的就是 BootstrapClassLoader),所以其他类加载器并没有机会再去
加载,从一定程度上防止了危险代码的植入。

思考一下上面这段代码输出什么?
思考一下上面这段代码输出什么?

想好了吗,公布答案了。
在这里插入图片描述
你答对了吗?是不是和你想得有点不一样呢。


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

相关文章:

  • Redis 内存突增时,如何定量分析其内存使用情况
  • Python OpenCV孤立点检测
  • Ansible内置模块之known_hosts
  • aws申请ssl证书的方法【该证书仅供aws】
  • etcd之etcd集群实践(六)
  • RocketMQ发送消息之事务消息
  • Python字符串格式化与数字处理指南
  • Python 连接 Redis 进行增删改查(CRUD)操作
  • 【微服务设计】从理论到实践:2PC(两阶段提交)与SAGA的全面比较与示例
  • Rust 建造者模式
  • IEC60870-5-104 协议源码架构详细分析
  • Mysql学习笔记(一):Mysql的架构
  • 单片机工程使用链接优化-flto找不到定义_链接静态库
  • 如何解决“无法在 ‘HTMLElement‘ 上设置 ‘innerText‘ 属性”的问题
  • vue项目删除无用的依赖
  • 【Flume实操】实时监听 NetCat 端口和本地文件数据到 HDFS 案例分析
  • 大数据面试题--kafka夺命连环问(后10问)
  • Unity资源打包Addressable资源保存在项目中
  • C# 网络编程技术
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-03