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

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

例如:

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


被加载的类也是在classpath下的

巴扎黑
巴扎黑

répondre à tous(3)
阿神

Pour faire simple :

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

Pour plus d'informations, recherchez simplement dans le moteur de recherche le mot-clé « Modèle de délégation parentale ».

Ty80

Hors sujet, je trouve que ce code est très soigné et a l'air confortable

PHPzhong

L'initialisation ici peut être comprise comme la dernière étape du chargement de la classe (appel de <clinit>). Si deux ClassLoads différents sont chargés, alors <clinit> sera exécuté deux fois et l'objet Class chargé est dans la méthode. zone. (Génération permanente), et correspondra à deux Class objets

.

Si le code de la méthode findClass est surchargé, le résultat final devrait être deux true. Le code ci-dessus, car le fichier class est finalement sous classpath, est remis à AppLoader pour qu'il soit chargé. Pour afficher l'effet, vous devez déplacer le fichier class vers un emplacement autre que classpath. L'affiche originale surcharge la méthode loadClass

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal