回忆下什么是双亲委派机制吧

1 篇文章 0 订阅
本文介绍了Java中的双亲委派机制,涉及类加载器的基本概念,包括启动类加载器、扩展类加载器和系统类加载器。双亲委派机制避免了类加载冲突,确保了JVM核心类库的安全。同时,文章还探讨了远程调试中JVM的原理。
摘要由CSDN通过智能技术生成

你知道的越多,你不知道的也越多!

该篇主要是自己的一个小总结吧,内容知识点主要来源于各大牛的一些博客。
外婆问我:什么是双亲委派原则?

1.前提须知

(1)该知识点主要是和java类加载有关系。
来,那什么又叫做java类加载呢?别急,总结下就是将一个java文件要加载到JVM里。
在这里插入图片描述
怎么感觉《运行时的数据区》怎么那么像《JVM的内存模型》啊?
额,,,别闹,简直就是一个好吧。
在这里插入图片描述
如果想具体了解,请移步:JVM 运行时数据区详解,写得非常好!

(2)那类加载器到底有哪几种呢?
答案:3种
在这里插入图片描述

通过代码来继续验证下,重点看下getParent
在这里插入图片描述
由于parent引用,所以是先 启动(启动JVM)类加载器 ,然后再有 拓展类加载器,接着系统类加载器(应用级别)啦。

2.大致的原理

继续来看下具体是怎么个加载法吧~ 先上图吧,加深记忆。
在这里插入图片描述

JVM在启动的时候,默认使用 系统类加载器 = AppClassLoader,但是呢,会优先委派给它的第一个亲也就是 ExtClassLoader ,第一个亲发现自己上面还有个亲,再继续传递给上面的一个亲也就是BootStrapClassLoader。第二亲上面已经没有亲了,所以只能自己老实巴交的看自己负责的路径下有没有对应的class文件,如果有则直接加载到JVM,否则,自己没法处理嘛,那就传回给ExtClassLoader呗。接下去就是同样的操作啦。

⇒ 双亲委派存在方向性 <=
啥意思呢?
也就是上面有提到一个“默认是AppClassLoader”。
那如果将启动类放到了ExtClassLoader可加载的路径下,那第一个类加载就是ExtClassLoader! 接下去的加载方向就是 BootStrap -> Ext , 注意,这里不会再使用到 App类加载器了,要不然就不叫做先委派给双亲,然后再自己处理

3. 背后的一些思考

  • 双亲委派机制是解决什么问题的?
    避免和jdk 系统用到的xxx.class 加载冲突 + 防止被篡改吧。
    试想一下,如果将字节码文件都存在同一个地方。万一写了重复类名的java文件,JVM无法确认是要加载哪个文件。
    所以采用先让parent处理。(亲爸亲妈能处理掉的问题,咱就别重复劳动,赶紧去解决他们没法解决的问题吧)。

  • 回忆下JVM Remote Debug
    在公司里有时候local环境无法排查问题的时候,可能就需要远程debug。
    还记得debug的时候,要配置jvm scoket 连接嘛?还记得要保证local 和远程代码一致么。
    背后原理:jvm scoket 连接传输请求,并转到local的jvm处理,最后将结果返回回去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值