3
这是对上一个问题的后续:Using GroovyClassLoader from Java - Classes not GC'd编译的Groovy类 - GC
使用自定义类加载器的Groovy我以前装的Groovy类在Java环境,并让他们GC'd正确,我不得不显式地清除元类注册表像这样:
for(Class<?> c : groovyClassLoader.getLoadedClasses()) {
GroovySystem.getMetaClassRegistry().removeMetaClass(c);
}
我现在已经切换到预编译的Groovy类中,我通过一个普通的Java类加载器加载一个JAR,和我现在看到的烫发根内存泄漏当我尝试重新加载更新的类时。
任何人都知道我是否需要做任何特别的事情来让我的班GC'd?我在运行时动态添加构造函数/方法到一些groovy,所以假设我仍然需要清除metaClassRegistry?
上面的代码不工作(明显),因为我不再使用groovyClassLoader,但我也尝试过迭代metaClassRegistry和刚刚返回null注册表:
def metaClasses = GroovySystem.getMetaClassRegistry().iterator()
while(metaClasses.hasNext()){
def thisGuy = metaClasses.next()
GroovySystem.getMetaClassRegistry().removeMetaClass(thisGuy)
}