web-dev-qa-db-fra.com

Qu'est-ce que PermGen représente réellement?

Je sais ce qu'est PermGen, à quoi il sert, pourquoi il échoue, comment l'augmenter, etc.

Ce que je ne sais pas, c'est ce que PermGen représente réellement. Permanent ... Gen ... quelque chose?

Est-ce que quelqu'un sait ce que PermGen représente réellement?

118
SCdF

Génération permanente. Les détails sont bien sûr spécifiques à la mise en œuvre.

En bref, il contient les objets Java associés aux classes et aux chaînes internées. Dans l'implémentation client de Sun avec le partage sur, classes.jsa est mappé en mémoire pour former les données initiales, avec environ la moitié en lecture seule et la moitié en copie.

Les objets Java simplement anciens sont conservés dans la génération permanente.

81

PermGen est utilisé par la machine virtuelle Java pour contenir les classes chargées. Vous pouvez l'augmenter en utilisant:

-XX:MaxPermSize=384m

si vous utilisez la JVM Sun ou OpenJDK.

Par conséquent, si vous obtenez une exception OutOfMemoryException: PermGen, vous devez soit augmenter la taille de PermGen, soit vous avez peut-être des problèmes avec le chargeur de classes.

58
bajafresh4life

Génération permanente. Voir le Java guide de réglage du GC) pour plus de détails sur le garbage collector.

20
Dustin

Correspond pas vraiment à la question initiale, mais peut-être que quelqu'un le trouvera utile. PermGen est en effet un domaine de la mémoire où Java gardait ses classes. Ainsi, beaucoup d’entre nous sont tombés sur MOO dans PermGen, s’il y en avait beaucoup, par exemple.

Depuis Java 8, la zone PermGen a été remplacée par la zone MetaSpace, qui est plus efficace et illimitée par défaut (ou plus précisément - limitée par la quantité de mémoire native, selon le format jvm 32 ou 64 bits). et la disponibilité de la mémoire virtuelle du système d'exploitation). Cependant, il est possible de le régler de différentes manières, en spécifiant par exemple une limite maximale pour la zone. Vous pouvez trouver des informations plus utiles dans cet article de blog .

8
Alex K.

PermGen signifie génération permanente .

Voici un bref résumé sur DDJ

6
Michael Easter
3
Rob Kennedy

Si je me souviens bien, le mot gen signifie génération, comme dans un ramasse-miettes générationnel (qui traite les objets plus jeunes différemment des objets de la vie et des objets "permanents"). Le principe de localité suggère que les objets récemment créés seront d'abord effacés.

3
Uri

Permgen est synonyme de génération permanente. C'est l'une des zones de mémoire de la machine virtuelle Java. Cela fait partie de Heap avec une taille fixe en utilisant un indicateur appelé MaxPermSize.

Pourquoi le nom "PermGen"?

Cette permgen a été nommée dans les premiers jours de Java. Permgen principales conserve toutes les métadonnées des classes chargées. Mais le problème est qu'une fois qu'une classe est chargée, elle reste dans la JVM jusqu'à son arrêt. Donc, nom permgen est opter pour cela. Mais plus tard, le chargement dynamique des classes est entré dans l'image mais le nom n'a pas été changé. Mais avec Java 8, ils ont également résolu ce problème. Now permagen a été renommé MetaSpace avec une taille de mémoire dynamique.

1
Sumanth Varada