Не удается выгрузить классы Groovy - PermGen Erros

У меня есть устаревшая система, которая широко использует 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 размер разумный?

1 ответ

Причиной возникновения этой проблемы с Groovy является характер работы языков сценариев, таких как Groovy. Они создают множество дополнительных объектов Class за кулисами, в результате чего ваши требования к пространству PermGen возрастают.

Вы не можете принудительно удалить класс, загруженный в пространство PermGen. Однако вы можете увеличить пространство PermGen:

Или для дополнительных опций, таких как настройки JVM для увеличения пространства PermGen и добавления настроек, позволяющих выгрузить классы PermGen во время GC, см. Этот пост:

Увеличить пространство пермгена

Другие вопросы по тегам