【问题标题】:Can't unloaded Groovy classes - PermGen Erros无法卸载 Groovy 类 - PermGen Erros
【发布时间】:2016-01-24 07:51:55
【问题描述】:

我有一个广泛使用Groovy 1.0 版的旧系统,目前我无法将Groovy 更新到更新版本。我不时收到PermGen 错误,因为即使没有人再使用它们,所有Groovy 类/脚本都保存在内存中。

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

我正在使用以下代码来创建 Script 对象:

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 时才会出现该问题。
  • 我无法更新我的 groovy 版本,因为它是旧系统
  • 如果您无法修复其中的错误,为什么要问这个问题?任其溃烂

标签: groovy permgen groovyclassloader


【解决方案1】:

您在使用 Groovy 时遇到此问题的原因在于 Groovy 等脚本语言的工作方式。它们在幕后创建了许多额外的 Class 对象,导致您的 PermGen 空间需求增加。

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

或者对于其他选项,例如 JVM 设置以增加 PermGen 空间并添加设置以允许在 GC 期间卸载 PermGen 类,请参阅这篇文章:

Increase permgen space

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2018-09-29
    • 2018-12-08
    • 2017-11-24
    相关资源
    最近更新 更多