我知道在JVM识别类的方式是通过classLoader和全类名识别的,那么当一个类由两个不同的classLoader加载后。对这个类初始化时,JVM会选择对哪个类进行初始化?其依据是什么?两个classLoader加载的Class对象在内存中的位置有什么区别吗?
例如:
有人提出看工程结构,我把加载器和被加载对象的结构放出来吧:
被加载的类也是在classpath下的
簡単に言うと:
詳細については、検索エンジンで「親の委任モデル」というキーワードを検索してください。
話は逸れましたが、このコードは非常にきちんとしていて快適に見えると思います
ここでの初期化は、クラスのロード (<clinit> の呼び出し) の最後のステップとして理解できます。2 つの異なる ClassLoad がロードされた場合、<clinit> が 2 回実行され、ロードされた Class オブジェクトがメソッド内にあります。 (永続的な世代)、2 つの Class オブジェクトに対応します。
<clinit>
Class
メソッド コードがオーバーロードされている場合、最終結果は 2 つの findClass になります。true ファイルは最終的に class の下にあるため、AppLoader に渡されてロードされます。エフェクトを表示する必要がある場合は、classpath ファイルを class 以外の場所に移動する必要があります。元の投稿者は classpath メソッド loadClass をオーバーロードしました。
findClass
true
class
classpath
loadClass
簡単に言うと:
リーリー詳細については、検索エンジンで「親の委任モデル」というキーワードを検索してください。
話は逸れましたが、このコードは非常にきちんとしていて快適に見えると思います
ここでの初期化は、クラスのロード (
<clinit>
の呼び出し) の最後のステップとして理解できます。2 つの異なる ClassLoad がロードされた場合、<clinit>
が 2 回実行され、ロードされたClass
オブジェクトがメソッド内にあります。 (永続的な世代)、2 つのClass
オブジェクトに対応します。メソッド コードがオーバーロードされている場合、最終結果は 2 つの
findClass
になります。true
ファイルは最終的にclass
の下にあるため、AppLoader に渡されてロードされます。エフェクトを表示する必要がある場合は、classpath
ファイルをclass
以外の場所に移動する必要があります。元の投稿者はclasspath
メソッドloadClass
をオーバーロードしました。