Java でのクラスのアンロード: クラス ローダーのダイナミクスの探索
Java アプリケーションでは、クラスのロードとアンロードを管理することは、動的操作とメモリの最適化。このニーズを浮き彫りにする一般的なシナリオの 1 つは、アプリケーションが複数の異なるサーバーとの通信を必要とし、それぞれが動的にロードされる独自のクラスのセットを必要とする場合です。
カスタム クラス ローダーを利用してこの要件を満たすことができ、クラスリモートサーバーから直接ロードできます。ただし、クラスが異なるサーバーからロードされる順序がアプリケーションの機能に影響を与える場合、ジレンマが発生します。ここで疑問が生じます: JVM を強制終了せずにクラスのアンロードを強制することは可能ですか?
その答えは、Java でのクラスのアンロードの動作を理解することにあります。通常、クラスをアンロードできるのは、クラスをロードしたクラス ローダーがガベージ コレクションで使用可能になった場合のみです。これは、クラスとそのクラス ローダーへのすべての参照を放棄する必要があることを意味します。
別のサーバーからロードされたクラスをアンロードする問題に対処するには、次のアプローチを検討してください。
MultiClassloader クラス
Classloader クラスを拡張する新しいクラス、MultiClassloader を導入します。 MultiClassloader は、個々の JAR ファイルを処理するように設計されたクラス ローダーである JarClassloader の配列またはリストを維持します。
クラス ロードの委任
defineClass() メソッド内MultiClassloader は、適切なクラス定義を検索して内部 JarClassloader を反復処理します。定義が見つかった場合は、それを返します。それ以外の場合は、NoClassDefFoundException をスローします。
MultiClassloader のインスタンス化
サーバーへの接続ごとに MultiClassloader インスタンスを作成します。これにより、異なるサーバーが同じクラスの異なるバージョンを使用できるようになります。
結論
MultiClassloader を実装し、サーバーごとに個別の JarClassloader を利用することで、次のような柔軟性が得られます。オンデマンドでクラスをロードおよびアンロードします。さらに、各サーバーは必要なクラスの独自の特定のバージョンを持つことができ、サーバー間通信のための堅牢で適応性のあるソリューションを提供します。
以上がJVM を再起動せずに Java クラスをアンロードできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。