2016-01-24 4 views
0

J'ai un système hérité qui utilise intensivement Groovy version 1.0 et actuellement je ne peux pas mettre à jour Groovy vers une version mise à jour. De temps en temps j'obtiens une erreur PermGen due au fait que toutes les classes/scripts Groovy sont gardés en mémoire même si personne ne les utilise plus.Impossible de décharger les classes Groovy - PermGen Erros

J'essaie de comprendre quelle est la bonne façon de décharger ces classes après avoir fini de les utiliser.

J'utilise le code suivant pour créer l'objet Script:

GroovyShell shell=new GroovyShell(); 
Script script = shell.parse("ANY_TEXT"); 
..... 

Et j'essaie le code suivant pour décharger la classe générée:

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; 

Malheureusement, ce n » Cela semble fonctionner parce que je continue à obtenir une erreur PermGen. Comment puis-je décharger Groovy classes et garder la taille PermGen raisonnable?

+0

Do vous avez cette erreur si vous n'essayez pas de le faire? –

+0

Avez-vous essayé de supprimer une version plus récente de groovy? Juste pour voir si cela a résolu le problème? Vous pourriez alors prendre cela pour les personnes qui décident que les choses ne peuvent pas être mises à jour, pour aider à argumenter votre cas pour la santé mentale –

+0

Le problème se produit uniquement lorsque vous utilisez Groovy. –

Répondre

0

La raison pour laquelle vous rencontrez ce problème avec Groovy est due à la manière dont fonctionnent les langages de script comme Groovy. Ils créent beaucoup d'objets de classe supplémentaires dans les coulisses, ce qui augmente vos besoins en espace PermGen.

Vous ne pouvez pas forcer la suppression d'une classe chargée dans l'espace PermGen. Cependant, vous pouvez augmenter l'espace PermGen:

Ou pour des options supplémentaires, comme les paramètres JVM pour augmenter l'espace PermGen et ajouter des paramètres pour permettre le déchargement des classes PermGen pendant GC, voir ce post:

Increase permgen space