1

私の質問は自明だと思います。使用している JVM が複数のクラス ローダーを使用していることを確認する最も迅速で正確な方法は何ですか? その場合、プログラムが正しく実行されるようにするには、どのような注意を払う必要がありますか?

編集:2つのクラスローダーが同じクラスをロードできるという事実について、明確にする必要があると思いますか?単一のインスタンスのみが必要なシングルトンのようなクラスの場合、どうすればそれを防ぐことができますか?

4

3 に答える 3

2

プログラムが正しく実行されるようにするには、どのような注意が必要ですか?

クラスについては、私が知っているものはありません。他のアプリケーション リソース (画像、ヘルプ ファイルなど) については、コンテキスト クラス ローダーを使用します。

于 2012-07-25T02:00:43.477 に答える
1

すべての JVM は、複数のクラス ローダーを使用します。

Java -XX:+TraceClassLoading -バージョン 2>&1 | カット -d'' -f2 | grep クラスローダ

版画

java.lang.ClassLoader
sun.reflect.DelegatingClassLoader
java.lang.ClassLoader$3
java.lang.ClassLoader$NativeLibrary
java.security.SecureClassLoader
java.net.URLClassLoader
sun.misc.Launcher$ExtClassLoader
java.lang.ClassLoader$ParallelLoaders
java.net.URLClassLoader$7
sun.misc.Launcher$ExtClassLoader$1
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$AppClassLoader$1
java.lang.SystemClassLoaderAction

これらの一部は内部クラスであり、一部は相互に拡張されていますが、ここには複数の ClassLoader があり、JVM のバージョンを尋ねただけです。

于 2012-07-25T07:22:42.403 に答える
1

私はその質問に苦労しています。

すべての JVM は常に複数のクラスローダーを実行しています。少なくとも、システム クラスローダー、拡張クラスローダー、およびアプリケーション クラスローダーです。OSGi などは、さらに多くを追加できます。

ここで問題を見つけるのに苦労しています。クラスローダーの要点は、名前空間を分離することです。

于 2012-07-25T05:48:09.580 に答える