Can';t卸载的Groovy类-PermGen错误

Can';t卸载的Groovy类-PermGen错误,groovy,permgen,groovyclassloader,Groovy,Permgen,Groovyclassloader,我有一个广泛使用Groovyversion1.0的遗留系统,目前我无法将Groovy更新为更新版本。由于所有的Groovy类/脚本都保存在内存中,即使没有人再使用它们,我也会不时收到一个PermGen错误 我试图找出在我使用完这些类之后卸载它们的正确方法 我使用以下代码创建脚本对象: GroovyShell shell=new GroovyShell(); Script script = shell.parse("ANY_TEXT"); ..... 我正在尝试使用以下代码卸载生成的类:

我有一个广泛使用
Groovy
version1.0的遗留系统,目前我无法将
Groovy
更新为更新版本。由于所有的
Groovy
类/脚本都保存在内存中,即使没有人再使用它们,我也会不时收到一个
PermGen
错误

我试图找出在我使用完这些类之后卸载它们的正确方法

我使用以下代码创建脚本对象:

GroovyShell shell=new GroovyShell();  
Script script = shell.parse("ANY_TEXT");  
.....
我正在尝试使用以下代码卸载生成的类:

MetaClassRegistry metaClassRegistry = MetaClassRegistry.getIntance(0);  
metaClassRegistry.removeMetaClass(script.getMetaClass().getClass());  
metaClassRegistry.removeMetaClass(script.getClass());  
metaClassRegistry.removeMetaClass(script.getBinding().getClass());  
script.setBinding(null);  
script.setMetaClass(null);  
script = null;  

不幸的是,这似乎不起作用,因为我不断收到
PermGen
错误。如何卸载
Groovy
类并保持
PermGen
大小合理

您在Groovy中遇到这个问题的原因是,像Groovy这样的脚本语言工作的本质。它们在幕后创建了大量额外的类对象,导致PermGen空间需求增加

不能强制删除加载到PermGen空间中的类。但是,您可以增加PermGen空间:

或者要获得其他选项,如增加PermGen空间的JVM设置和允许在GC期间卸载PermGen类的添加设置,请参阅本文:


如果不尝试执行此操作,是否会出现此错误?是否尝试过在中删除较新版本的groovy?只是想看看它是否解决了问题?然后,你可以把这件事告诉那些决定事情不能更新的人,以帮助他们论证你的合理性问题只有在使用Groovy时才会出现。我不能更新Groovy版本,因为它是一个遗留系统如果你不能修复其中的bug,为什么会有这个问题?就让它化脓吧