java - 类加载后隔离问题
巴扎黑
巴扎黑 2017-04-18 09:45:42
0
3
378

我知道在JVM识别类的方式是通过classLoader和全类名识别的,那么当一个类由两个不同的classLoader加载后。
对这个类初始化时,JVM会选择对哪个类进行初始化?其依据是什么?
两个classLoader加载的Class对象在内存中的位置有什么区别吗?

例如:

有人提出看工程结构,我把加载器和被加载对象的结构放出来吧:


被加载的类也是在classpath下的

巴扎黑
巴扎黑

reply all(3)
阿神

Simply put it is this:

1、ClassLoad可以有很多,而且它们之间存在层级关系,最顶层的叫做BootClassLoad。
2、每层ClassLoad都用自己的工作范围。
3、每个ClassLoad中都有一个上级ClassLoad的引用。
4、当某一个ClassLoad开始工作时(加载Class),他会首先调用上级ClassLoad来Load Class,层层向上,直到顶层。
5、只有当上级ClassLoader没能在职责范围内Load到指定Class时,下级ClassLoader才会在自己的职责范围内来Load。

For more information, just search the keyword "Parental Delegation Model" in the search engine.

Ty80

Off topic, I think this code is very neat and looks very comfortable

PHPzhong

The initialization here can be understood as the last step of class loading (calling the <clinit>),如果是两个不同的ClassLoad加载的话那么<clinit>会被执行两次,加载的Class对象在方法区(永久代),并且会对应两个Classobject.

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

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template