一部の JVM ベース コード (Java 環境で実行されている groovy) でのメモリ リークを調査しています。
Groovy クラスのロードに関するさまざまな動作を調査するために使用している単純な Java テスト クラスがあり、次のコードを (プレーンな Java から) 実行しています。
GroovyClassLoader localGroovyClassLoader = new GroovyClassLoader();
Class clazz = localGroovyClassLoader.loadClass("com.test.Example", true, false, true);
Example
単純なGroovyクラスです(私のダミーケースであるため、特に何もしません)。
ここで、上記のコードの直後に次のログを記録するとします。
localGroovyClassLoader.getLoadedClasses().length
ロードされたクラスがすべて正常であることを確認できるにもかかわらず、0 がログに記録されます (clazz
実際にはそうであることが出力されますExample
)。
このメソッドを使用したい理由はgetLoadedClasses()
、その場で Groovy を動的にリロードしているためです。そのため、リロード時にメタ レジストリもクリアする必要があります (詳細はこちら: https://stackoverflow.com/a/10484023/258813 ) -次のコードを使用することを計画していました。
for (Class c : localGroovyClassLoader.getLoadedClasses()){
GroovySystem.getMetaClassRegistry().removeMetaClass(c);
}
しかし明らかに、getLoadedClasses()
クラスをロードしたばかりなのに 0 が返された場合、上記のコードを実行することはできません。
ありがとう