これが私のユースケースです。アプリケーションで発生する可能性のあるメモリ リークを絞り込もうとしており、メモリ分析ツールを使用してヒープのスナップショットを作成し、オブジェクト インスタンスと参照を探すことができます。(役立つ場合に備えて、YourKit を使用しています。)
このアプリケーションは、ダイナミック プロキシと CGLIB プロキシを広範囲に使用します。これにより、WeakHashMap にクラスとクラスローダーへの大量の参照が格納されます。
テスト ケースの実行後、オブジェクト X とそのクラスローダーへのすべてのハード参照がなくなることを期待していますが、テスト ケースには多くのプロキシが含まれていたため、最終的に多くの弱い/ソフト参照が残っています。(私は WeakHashMap 参照しか見つけることができませんが、YourKit は要約で弱い参照とソフト参照の両方を 1 つの項目にラップしているため、どこかでソフト参照が欠落していないかどうかはわかりません。)
これは、JVM から完全な GC を要求した後でも当てはまります。(sun 1.6.0_23 JDK をサーバーモードで使用)
JVMは、これらのオブジェクトへの弱い/ソフト参照しかないことを認めているようですが、これらのことを 100% 確実にするために GC に強制することはできません。(したがって、私が望むのは、これがヒープから完全に消え、permgen のクラスローダーの使用もなくなることです。)
ソフト/弱く参照されているオブジェクトのみを破棄するように JVM を構成および/または強制する方法を知っている人はいますか?