0

私はいくつかのメモリリークを取り除こうとしています。クラスローダーからすべてのクラス (私のものだけでなく) のすべての静的変数をリセットしたいと思います。classesClassLoader によって認識されるすべてのクラスをリストする属性があります。

だから私はそれをループして、リフレクションで静的変数をnullに設定したいだけです。

問題は、これらすべてのクラスが必ずしも初期化されていないことです (静的ブロックの初期化が実行されませんでした)。値をリセットしてからクラスをアンロードすることが目的であるため、このクラスを初期化しても意味がありません。さらに、別のクラス CHILD の SBI で使用されているクラス ROOT をリセットすると、CHILD の SBI を実行すると、予期しない動作が発生する可能性があります...

問題は、SBI が JVM によって実行されたかどうかを知る方法はあるのかということです。


ノート:

ClassLoader の findLoadedClass を使用することを提案する人には、仕様に次の重要な文があります。初期化は、JLS3 $12.4.1 で定義された正確な瞬間にのみ発生します *

4

1 に答える 1

0

staticクラスが JVM にロードされた場合、ブロックが初期化されました。

ClassLoaderで検出できるJVMにクラスがロードされていますか

于 2013-05-02T13:19:09.440 に答える