停止および再起動せずに、それ自体の一部 (一度に 1 つのクラス) を更新する機能を必要とするアプリケーションがあります。JavaCompiler API を使用すると、変更されたクラス ソース コードの生成、再コンパイル、ロード、およびクラスのインスタンス化を簡単に行うことができます。これはすべてメモリ内で実行できます (ディスクまたはネットから読み取られるファイルはありません)。
アプリケーションは、そのようなクラスの複数のオブジェクトをインスタンス化することはありません。そのオブジェクトへの参照は 2 つまたは 3 つしかありません。変更されたクラスがロードされてインスタンス化されると、それらの参照はすべて新しいオブジェクトに変更されます。また、変更されたクラスのロード中に、影響を受けるクラスのメソッドが別のスレッドで実行されていないこともおそらく保証できます。
私の質問は次のとおりです。私のクラスローダーは、以前にロードしたクラスと同じ名前の変更されたクラスをロードする際に問題がありますか?
ロードされたクラスのキャッシュをクラスローダーに明示的に実装しない場合、問題を回避できますか? または、親クラス ローダーへの委譲が問題を引き起こす可能性はありますか?
クラス ローダーの単一のインスタンスを使用したいと考えていますが、必要に応じて、クラスを更新するたびに新しいインスタンスを作成できます。
注: OSGI を調べたところ、必要以上に多すぎるようです。