什么是 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.打破双亲委派机制的场景有哪些,可以举例说明吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小白条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值