[Bonne description] [1] du type qui en sait beaucoup sur les composants internes de GC. Au fait, il y a beaucoup d'informations utiles liées au GC dans son blog. [1]: blogs.oracle.com/jonthecollector/entry/…
Ivan Doubrov
Réponses:
84
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 internes. Dans l'implémentation client de Sun avec partage activé, la classes.jsamémoire est mappée pour former les données initiales, avec environ la moitié en lecture seule et la moitié en copie sur écriture.
Les objets Java qui sont simplement anciens sont conservés dans la génération titulaire.
PermGen est utilisé par la JVM pour contenir les classes chargées. Vous pouvez l'augmenter en utilisant:
-XX:MaxPermSize=384m
si vous utilisez Sun JVM ou OpenJDK.
Donc, si vous obtenez une OutOfMemoryException: PermGen, vous devez soit agrandir PermGen, soit vous pourriez avoir des problèmes de chargeur de classe.
Quelle était la réponse acceptée au moment où vous avez publié ce commentaire? La réponse actuellement acceptée ( celle-ci , par "Tom Hawtin - tackline") me semble exacte. Cela peut-il être judicieux de modifier votre commentaire afin que les gens ne se méfient pas de la réponse actuellement acceptée?
jbyler
20
Génération permanente. Consultez le guide de réglage de java GC pour plus de détails sur le garbage collector.
Pas vraiment lié à la question d'origine, mais peut-être que quelqu'un la trouvera utile. PermGen est en effet une zone en mémoire où Java conservait ses classes. Donc, beaucoup d'entre nous sont tombés sur OOM dans PermGen, s'il y avait, par exemple, beaucoup de cours.
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, en fonction de la disponibilité de la mémoire virtuelle 32 ou 64 bits jvm et du système d'exploitation). Cependant, il est possible de l'ajuster de certaines 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 .
Si je me souviens bien, le gen signifie génération, comme dans un garbage collector générationnel (qui traite les objets plus jeunes différemment des objets de la quarantaine et des objets «permanents»). Le principe de localité suggère que les objets récemment créés seront d'abord effacés.
Permgen est synonyme de génération permanente. C'est l'une des zones de mémoire JVM. Il fait partie de Heap avec une taille fixe en utilisant un indicateur appelé MaxPermSize.
Pourquoi le nom «PermGen»?
Ce permgen a été nommé au tout début de Java. Permgen mains 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 restera dans la JVM jusqu'à l'arrêt de la JVM. Le nom permgen est donc opter pour cela. Mais plus tard, le chargement dynamique des classes est entré en scène mais le nom n'a pas été changé. Mais avec Java 8 , ils ont également résolu ce problème. Désormais, permagen a été renommé MetaSpace avec une taille de mémoire dynamique.
Réponses:
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 internes. Dans l'implémentation client de Sun avec partage activé, la
classes.jsa
mémoire est mappée pour former les données initiales, avec environ la moitié en lecture seule et la moitié en copie sur écriture.Les objets Java qui sont simplement anciens sont conservés dans la génération titulaire.
la source
PermGen est utilisé par la JVM pour contenir les classes chargées. Vous pouvez l'augmenter en utilisant:
-XX:MaxPermSize=384m
si vous utilisez Sun JVM ou OpenJDK.
Donc, si vous obtenez une OutOfMemoryException: PermGen, vous devez soit agrandir PermGen, soit vous pourriez avoir des problèmes de chargeur de classe.
la source
Génération permanente. Consultez le guide de réglage de java GC pour plus de détails sur le garbage collector.
la source
Pas vraiment lié à la question d'origine, mais peut-être que quelqu'un la trouvera utile. PermGen est en effet une zone en mémoire où Java conservait ses classes. Donc, beaucoup d'entre nous sont tombés sur OOM dans PermGen, s'il y avait, par exemple, beaucoup de cours.
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, en fonction de la disponibilité de la mémoire virtuelle 32 ou 64 bits jvm et du système d'exploitation). Cependant, il est possible de l'ajuster de certaines 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 .
la source
PermGen est synonyme de génération permanente .
Voici un bref texte de présentation sur DDJ
la source
Génération permanente
la source
Si je me souviens bien, le gen signifie génération, comme dans un garbage collector générationnel (qui traite les objets plus jeunes différemment des objets de la quarantaine et des objets «permanents»). Le principe de localité suggère que les objets récemment créés seront d'abord effacés.
la source
Permgen est synonyme de génération permanente. C'est l'une des zones de mémoire JVM. Il fait partie de Heap avec une taille fixe en utilisant un indicateur appelé MaxPermSize.
Pourquoi le nom «PermGen»?
Ce permgen a été nommé au tout début de Java. Permgen mains 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 restera dans la JVM jusqu'à l'arrêt de la JVM. Le nom permgen est donc opter pour cela. Mais plus tard, le chargement dynamique des classes est entré en scène mais le nom n'a pas été changé. Mais avec Java 8 , ils ont également résolu ce problème. Désormais, permagen a été renommé MetaSpace avec une taille de mémoire dynamique.
la source