私はJavaのインタビューで尋ねられました。わかっているように、親委託モデルのため、Javaクラスローダーはクラスを一度しかロードしません。だから私の答えは、カスタムクラスローダーを使用して読み込むことです。そうですか?この質問に答えるには?JVMでクラスローダーを使用してクラスを2回ロードするには?
0
A
答えて
2
によって異なります。修飾名がjava.
で始まるクラスは、ブートストラップローダによってのみロードされるため、2回目にロードされることはありません。ブートストラップローダによってロードされる他のすべてのクラスは、ブートストラップローダがすべてのローダの親であるため、親デリゲートモデルに従わないカスタムクラスローダ実装によってのみロードできます。
ClassLoader
インスタンスでロードされる他のすべてのクラスでは、親委託モデルに続いてローダーを親として持たない標準クラスローダを構築することができます。もちろん、カスタムローダを使用してロードすることもできますが、デリゲートモデルに従うことはできません。その選択は、元々同じローダによってロードされた、そのクラスによって参照される他のクラスをどのように処理するかによって異なります。それらを再ロードして、その環境の完全なコピーを作成するか、元のローダにローディングをリダイレクトしようとします。逆参照があると問題が発生します。
次のコード例では、アプローチを示しています。あなたは二回* *クラスをロード
public class ReloadMySelf {
public static void main(String[] args) throws IOException, ClassNotFoundException {
final Class<?> o = ReloadMySelf.class;
URL loc = o.getProtectionDomain().getCodeSource().getLocation();
ClassLoader parent = o.getClassLoader().getParent();
try(URLClassLoader cl = new URLClassLoader(new URL[]{loc}, parent)) {
Class<?> duplicate = cl.loadClass(o.getName());
System.out.println("original: "+o+" ("+o.getClassLoader()+')');
System.out.println("duplicate: "+duplicate+" ("+duplicate.getClassLoader()+')');
}
}
}
関連する問題
- 1. iFrameを使用してJQueryを2回ロードできますか?
- 2. クラスローダーを使用してクラスファイルをサーバーからクライアントにロードする方法
- 3. このJVM TIエージェントを2回ロードできません。
- 4. JVMが注釈クラスをロードするのはいつですか
- 5. クラスローダーを使用してSpring Beanをインスタンス化する方法は?
- 6. CodeigniterクラスをCodeigner以外のクラスにロードして使用する
- 7. jacob.dllはすでに別のクラスローダーにロードされています
- 8. JNIを使用して変更されたクラスファイルをJVMにロードする
- 9. JVMでクラスをロードするにはどうすればいいですか?
- 10. エンティティメソッドを2回ロードする
- 11. jQueryを2回ロードする
- 12. "except"と同じ例外クラスをパラメータとして2回使用
- 13. JVMによってクラスがロードされるのはいつですか?
- 14. メモリマップファイルを使用して2つのJVM間で通信する方法は?
- 15. CodeIgniterコントローラURLでパラメータを使用するときに2回ロードする
- 16. 複数のクラスローダーを使用してPermGenスペースを保存する
- 17. Java ClassLoader:同じクラスを2回ロードする
- 18. JVMが適切にクラスをロードできない
- 19. 変数を2回使用してfile_get_contentsを使用する
- 20. ナビゲーションスタックにUIViewControllerを2回ロード
- 21. Taskdefクラスcom.temp.install.common.action.UserInstallDirRuleがクラスローダーAntClassLoaderを使用して見つかりません
- 22. AJAXを使用して複数回フォームをロードする
- 23. webpack 2でエクスポーズローダーを使用してモジュールをロードする
- 24. すべてのクラス名はすべてのJVMで使用できますか?
- 25. クラスローダー階層を使用する利点は何ですか?
- 26. queryEqualToを使用してFirebase()2回
- 27. Java 7でKeyStoreをロードするとクラスローダーがリークする
- 28. JUnitとキュウリに同じクラスローダーを使用
- 29. mvnDebugを使用すると「このJVM TIエージェントを2回ロードできません」というエラーが発生しました。
- 30. JVMクロスプロジェクトでjavascriptをロードする方法
意味しますか? – EJP
@ EJP、はい、あなたは正しくです – flower
2つの異なるクラスローダーを使用します –