为了账号安全,请及时绑定邮箱和手机立即绑定

类加载后隔离问题

类加载后隔离问题

阿波罗的战车 2019-03-28 22:19:30
我知道在JVM识别类的方式是通过classLoader和全类名识别的,那么当一个类由两个不同的classLoader加载后。对这个类初始化时,JVM会选择对哪个类进行初始化?其依据是什么?两个classLoader加载的Class对象在内存中的位置有什么区别吗?例如:有人提出看工程结构,我把加载器和被加载对象的结构放出来吧:被加载的类也是在classpath下的
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

简单来说是这样的:


1、ClassLoad可以有很多,而且它们之间存在层级关系,最顶层的叫做BootClassLoad。

2、每层ClassLoad都用自己的工作范围。

3、每个ClassLoad中都有一个上级ClassLoad的引用。

4、当某一个ClassLoad开始工作时(加载Class),他会首先调用上级ClassLoad来Load Class,层层向上,直到顶层。

5、只有当上级ClassLoader没能在职责范围内Load到指定Class时,下级ClassLoader才会在自己的职责范围内来Load。

更多内容,搜索引擎检索关键字“双亲委派模型”即可。


查看完整回答
反对 回复 2019-04-23
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

偏题了 我觉得这代码很工整 看上去很舒服


查看完整回答
反对 回复 2019-04-23
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

这里的初始化可以理解为,类加载的最后一步(调用<clinit>),如果是两个不同的ClassLoad加载的话那么<clinit>会被执行两次,加载的Class对象在方法区(永久代),并且会对应两个Class对象.

如果是重载findClass方法代码运行出来的结果最后应该是两个true.上述代码,因为class文件最终是在classpath下,所以都是交给AppLoader去加载,如果需要呈现效果,需要把class文件挪一个位置,挪到不在classpath.楼主是重载loadClass方法


查看完整回答
反对 回复 2019-04-23
  • 3 回答
  • 0 关注
  • 503 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信