Quelle est la signification de l'espace PermGen en Java?
Réponses
Trop de publicités?PermGen space est réservée à long terme des objets - surtout Class
objets chargés par l' ClassLoader
. PermGen ne seront pas nettoyés, sauf dans des circonstances très particulières (en particulier, lorsque l' ClassLoader
que les chargés de ces classes est hors de portée).
C'est un garbage collection d'optimisation - si des objets que nous ne nous attendons pas à être des ordures collectées sont conservées séparément, il compresse l'espace où le reste des objets sont stockés, ce qui conduit à moins de travail pour le garbage collector.
Le PermGen est spécifique à VMs avoir générations de collecte des ordures.
Si vous utiliser, disons, JRockit, de l'importance de la PermGen" est inexistant car JRockit n'a pas ce concept.
Il utilise pour être commun, il y a quelques années, quand l'étrange "de PermGen space" des erreurs ont commencé à apparaître et que personne ne savait encore qui la faute qu'il a été (Tomcat + Hibernate + Soleil VM utilisée pour déclencher ce) afin de remplacer un composant de nos jours, les problèmes sont compris, mais il y a des années quand ils ont commencé le recadrage, il n'était guère possible de trouver toute l'information sur ce sujet). Vous pouvez remplacer Tomcat avec de la Résine ou le Soleil VM avec JRockIt etc.
Je pense qu'il est important de souligner que PermGen ne font pas partie de la Java des specs et qu'un détail d'implémentation de (très) certaines machines virtuelles.
La seule chose que vous devez vraiment savoir est que l'espace PermGen est séparé du tas général et n'est pas affecté par le paramètre VM -Xmx
. Si vous avez une application qui charge de nombreuses définitions de classe (comme un serveur d'applications ou un IDE), vous pouvez définir la taille de l'espace PermGen à l'aide de l'option -XX:MaxPermSize
VM.
La génération permanente contient des métadonnées décrivant les classes d'utilisateurs (classes qui ne font pas partie du langage Java).
Les applications avec une grande base de code peuvent remplir ce segment du tas, ce qui entraînera java.lang.OutOfMemoryError: PermGen
. Cela n'est pas affecté par le paramètre -Xmx ni par la quantité de mémoire dont vous disposez sur la machine. Pour définir une nouvelle taille initiale, utilisez -XX:PermSize=64m
. Pour définir une taille maximale, utilisez -XX:MaxPermSize=128m