7

私の最終的な目標は、JVM に既にロードされたクラスを再ロードできるようにすることです。

次の回答を読んだ後Javaでクラスをアンロードしますか? 、私は独自の Class-Loader を実装しようとしています。これは、ロードするクラスごとに Class-Loader の異なるインスタンス (それ自体と同じタイプ) を作成します。

したがって、結果は 1 つの Class-Loader ごとに 1 つのクラスになります。

目的は、クラス (つまりそのすべてのインスタンス) を GC できるようにしてから、その class-loader をアンロードし、そのバイトから同じクラスを再ロードできるようにすることです。

問題は、クラス インスタンスが finalize() メソッドを使用してガベージ コレクションされていることを確認できますが、Class-Loader をアンロードまたはガベージ コレクションすることができません。
それがどのように行われるかを示すコード例、簡単なテストはありますか?

ありがとう、助けていただければ幸いです

編集

より明確にするために、新しいオブジェクトのインスタンス化が 'new( )' オペランドを介して行われ、クラスローダーが明示的にメインのクラスをリロードしていないコード例に興味がありますが、次の 'new( )」が呼び出されます。

4

2 に答える 2

1

IBM J9 VMでは、クラスローダーのアンロードはグローバル gc 中にのみ発生するため、事情が異なります。これにより、作成中のクラスローダが多数ある場合に、グローバル gc での一時停止時間が長くなり、メモリ不足になる可能性があります。com.sun.jmx.remote.opt.util.OrderClassLoaderstype のリモート メッセージごとにクラスローダーのインスタンスが 1 つ作成される JMXMP で、この問題が発生しましたMBeanServerRequestMessage.CREATE_MBEAN_LOADER_PARAMS

于 2013-08-07T12:09:47.157 に答える