什么是 JVM 双亲委派机制?

什么是 JVM 双亲委派机制?

题目

什么是 JVM 双亲委派机制?

推荐解析

通俗的说,双亲委派模型,就是加载类的时候,先请求其父类加载器去加载,如果父类加载器无法加载类,再尝试自己去加载类。如果都没加载到,就抛出异常。

双亲委派机制加载过程:

双亲委派机制思维导图:

使用双亲委派机制的好处:

1)使得 Java 类随着它的类加载器一起具有一种带有优先级的层次关系,每个层级得到了统一。

2)通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子 ClassLoader 再加载一次,避免了多份同样字节码的加载。

3)安全,避免核心类被修改 Java 核心 API 中定义类型不会被随意替换,假设通过网络传递一个名为 Java.lang.Long 的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心 Java API 发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的 Java.lang.Long,而直接返回已加载过的 Long.class,这样便可以防止核心 API 库被随意篡改。

总结:

1)层级得到统一

2)避免相同字节码被重复加载

3)防止核心 API 库被随意篡改

其他补充

鱼聪明AI 的回答:

鱼聪明 AI地址:鱼聪明AI

双亲委派模型是 Java 类加载器的一种工作模式,通过这种模式,Java 虚拟机将类文件加载到内存中,以保证 Java 程序能够正常运行。

双亲委派模型的工作流程如下:

1)当加载一个类时,会先从应用程序类加载器的缓存里查找相应的类,如果能找到就返回对象,如果找不到就执行下面流程;

2)在扩展加载器缓存中查找相应的类,如果能找到就返回对象,如果找不到就继续下面流程;

3)在启动类加载器中查询相应的类,如果找到就返回对象,如果找不到就继续下面流程;

4)在扩展加载器中查找并加载类,如果能找到就返回对象,并将对象加入到缓存中,如果找不到就继续下面流程;

5)在应用程序类加载器中查找并加载类,如果能找到就返回对象,并将对象加入到缓存中,如果找不到就返回 ClassNotFound 异常。

这个模型的优点包括:

1)安全性:双亲委派模型可以保证先加载 JDK 的核心类,再加载应用程序的类,有效防止了因为应用程序中因为某个类的存在一些不安全问题,导致JVM变得不安全。

2)避免重复加载:向下委派机制保证需要加载的类,都得到了加载。

CSDN 同学的回答:

1)当加载一个类时,先判断此类是否已经被加载,如果类已经被加载则返回;

2)如果类没有被加载,则先委托父类加载(父类加载时会判断该类有没有被自己加载过),如果父类加载过则返回;如果没被加载过则继续向上委托;

3)如果一直委托都无法加载,子类加载器才会尝试自己加载。

博客园 同学的回答:

1)当一个加载器要加载类的时候,若自己加载不了。

2)就逐层向上交由双亲去加载,当双亲的某个加载器加载成功后,再向下返回成功。

3)如果所有的双亲和自己都无法加载,则会抛出异常。

推荐阅读书籍和文章

1)《深入拆解 Java 虚拟机》推荐理由:想要深入了解 JVM 的,此书是必读项!

2)深入分析Java ClassLoader原理,推荐理由:文章对于类加载的原理、为什么要使用双亲委派机制讲的十分详细,图文结合。

欢迎交流

关于双亲委派机制其实还有很多可以讲,我在这里抛出几个问题,大家可以在评论区进行留言进行回答,你的回答也许将会成为其他小伙伴面试中的一部分,大家可以互相交流,拓展自己的思路。

1.双亲委派机制有缺点吗?有哪些缺点?

2.怎么打破双亲委派机制?为什么要打破?

3.打破双亲委派机制的场景有哪些,可以举例说明吗?

相关推荐

  1. JVM双亲委派机制

    2024-03-21 06:00:02       41 阅读
  2. JVM双亲委派模型

    2024-03-21 06:00:02       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-21 06:00:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-21 06:00:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-21 06:00:02       87 阅读
  4. Python语言-面向对象

    2024-03-21 06:00:02       96 阅读

热门阅读

  1. LeetCode解法汇总1969. 数组元素的最小非零乘积

    2024-03-21 06:00:02       42 阅读
  2. 5546: 【搜索】旅行商问题

    2024-03-21 06:00:02       41 阅读
  3. 图片html5提供的懒加载与vue-lazyload的区别

    2024-03-21 06:00:02       41 阅读
  4. Python每日三道经典面试题(十七)

    2024-03-21 06:00:02       44 阅读
  5. 【移动端】AMap Flutter与Android AMap SDK交互

    2024-03-21 06:00:02       36 阅读
  6. Flask与微信小程序数据通讯 第二步 微信支付

    2024-03-21 06:00:02       37 阅读
  7. 微信小程序自定义组件

    2024-03-21 06:00:02       47 阅读