模块隔离原理

本文探讨了JVM中的模块隔离原理,详细解释了类加载器和命名空间的关系,以及模块部署过程。在类加载器部分,强调了双亲委托模型的作用和类加载的命名空间概念。在模块部署方面,描述了模块如何在JVM中独立存在并避免冲突。文章还介绍了运行时进程视图、发布结构和加载类的具体步骤,展示了如何利用类加载器实现模块化部署框架。
摘要由CSDN通过智能技术生成

类加载器和命名空间

提到类加载器,都能联想到大名鼎鼎的双亲委托模型,但对于为什么要使用双亲委托模型,能给出靠谱答案的就不多了。

一个类加载器其实是对应了一个命名空间,换句话说,同一个类被不同加载器加载会产生两个Class对象,在jvm内部是通过系统字典维护class对象和类名以及类加载器的关系。而且不仅仅Class对象也有命名空间。

假设类A由M和N分别加载,则其在jvm里的结构如图:
类命名空间
AM和AN分别代表被M和N加载的类A,相应的am和an则代表命名空间M和N下的A的对象。

如果:
1.
Object a = someMethod //someMethod返回的是个A对象
A a= (A)a

其运行时位于命名空间M,someMethod返回an,此时会抛出ClassCastException。
2. 假设又有:if(a instanceof A),其运行时也位于M中,碰巧这次a又是an,返回结果是fasle。
3. 最后假设有方法:void test(A a),其运行时还是位于M,又很巧的方法参数传递的是an对象,此时则会抛出LinkageError。

模块部署原理

假设M和N是两个独立模块的类加载器且位于同一个jvm中ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值