类加载后隔离问题
我知道在JVM识别类的方式是通过classLoader和全类名识别的,那么当一个类由两个不同的classLoader加载后。
对这个类初始化时,JVM会选择对哪个类进行初始化?其依据是什么?
两个classLoader加载的Class对象在内存中的位置有什么区别吗?
例如:
有人提出看工程结构,我把加载器和被加载对象的结构放出来吧:
被加载的类也是在classpath下的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
偏题了 我觉得这代码很工整 看上去很舒服
这里的初始化可以理解为,类加载的最后一步(调用
<clinit>
),如果是两个不同的ClassLoad加载的话那么<clinit>
会被执行两次,加载的Class
对象在方法区(永久代),并且会对应两个Class
对象.如果是重载
findClass
方法代码运行出来的结果最后应该是两个true
.上述代码,因为class
文件最终是在classpath
下,所以都是交给AppLoader去加载,如果需要呈现效果,需要把class
文件挪一个位置,挪到不在classpath
.楼主是重载loadClass
方法简单来说是这样的:
更多内容,搜索引擎检索关键字“双亲委派模型”即可。