Comment parsingr le contenu de PermGen?

Je veux obtenir une copie du PermGen pour voir pourquoi il se remplit. Y a-t-il un moyen d’parsingr cela? Je connais déjà les principaux suspects, tels que log4j, le rechargement de l’application Web tomcat, etc., mais j’ai également un code de génération de proxy personnalisé dans mon application et je souhaite simplement regarder sous le capot.

Est-ce possible d’une certaine manière?

Le PermGen se compose normalement du pool de littéraux de chaîne et des classes chargées. Pour répondre à une partie de votre problème, à savoir le pool de littéraux de chaîne, j’ai écrit un utilitaire pour imprimer un pool de littéraux de chaîne de JVM en cours d’exécution. Il est disponible ici:

https://github.com/puneetlakhina/javautils/blob/master/src/com/blogspot/sahyog/PrintSsortingngTable.java

Il est basé sur PermStat , qui est la classe utilisée pour imprimer les statistiques de permgen par l’outil jmap.

Vous pouvez utiliser les drapeaux:

-XX:+TraceClassLoading -XX:+TraceClassUnloading 

Ils impriment les identités des classes lorsqu’elles sont chargées / déchargées de la génération permanente. Si vous ajoutez -XX:+PrintGCDetails vous pouvez également suivre la taille du permgen.

Notez que je ne suis pas sûr que les indicateurs soient pris en charge dans les machines virtuelles Java autres que celles de Sun.

Un autre suspect de PermGen hors mémoire-erreurs est l’ internement de chaînes . Vérifiez les endroits où vous avez interné des chaînes dans votre code.

Si vous cherchez à obtenir une liste de toutes les classes chargées, vous pouvez utiliser jconsole . Cliquez sur l’onglet classes puis cliquez sur “Verbose Output”. Cela imprimera chaque classe chargée dans stdout . J’ai trouvé cela très utile pour localiser un problème de classe proxy JAXB.

Vous devrez peut-être lancer votre application avec l’option de ligne de commande jconsole pour que jconsole puisse s’y attacher.

Est-ce que jmap -permgen va jmap -permgen ?

Voir le guide de dépannage pour Java http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/memleaks.html#gbyuu