65 votes

Qu'est-ce que 'PermSize' en Java ?

Je parcourais le document en Gestion de la mémoire en Java et c'est là que je suis tombé sur PermSize que je n'ai pas compris. Le document dit qu'il stocke "la JVM stocke ses métadonnées", mais je n'arrivais pas à comprendre exactement ce que l'on entend par métadonnées. J'ai cherché sur Google et j'ai lu quelque part qu'il stocke un objet de valeur (objet défini par l'utilisateur).

Quel genre d'objets y sont stockés ? Un exemple accompagné d'une explication serait le bienvenu.

107voto

Pascal Thivent Points 295221

Une définition rapide de la "génération permanente" :

"La génération permanente est utilisée pour contenir les données réfléchies de la VM elle-même telles que les objets de classe et les méthodes de méthode. Ces objets réfléchissants sont directement alloués dans la génération génération, et elle est dimensionnée indépendamment des autres générations." [réf]

En d'autres termes, c'est là que vont les définitions de classe (et cela explique pourquoi vous pouvez recevoir le message OutOfMemoryError: PermGen space si une application charge un grand nombre de classes et/ou lors d'un redéploiement).

Notez que PermSize s'ajoute à la -Xmx valeur définie par l'utilisateur dans les options de la JVM. Mais MaxPermSize permet à la JVM d'être en mesure de faire croître les PermSize à la quantité spécifiée. Au départ, lorsque la VM est chargée, le MaxPermSize sera toujours la valeur par défaut (32mb pour les -client et 64mb pour -server ) mais n'absorbera cette quantité que lorsqu'elle sera nécessaire. D'un autre côté, si vous définissez LES DEUX PermSize et MaxPermSize à 256 mégaoctets, vous remarquerez que le tas global a augmenté de 256 mégaoctets en plus de l'augmentation de la capacité de stockage. -Xmx réglage.

23voto

sleske Points 29978

Cet article de blog donne une bonne explication et un aperçu du contexte. Fondamentalement, la "génération permanente" (dont la taille est donnée par PermSize) est utilisée pour stocker des choses pour lesquelles la JVM doit allouer de l'espace, mais qui ne seront pas (normalement) collectées par les ordures (d'où le terme "permanent") (+). Cela signifie par exemple les classes chargées et les champs statiques.

Il existe également un FAQ sur le ramassage des ordures directement de Sun, qui répond à certaines questions sur la génération permanente. Enfin, voici un article de blog avec beaucoup de détails techniques.

(+) En fait, les parties de la génération permanente sera être GCed, par exemple, les objets de classe seront supprimés lorsqu'une classe est déchargée. Mais cela n'était pas courant lorsque la génération permanente a été introduite dans la JVM, d'où le nom.

9voto

ankon Points 1576

Le pool de permament contient tout ce qui n'est pas des données de votre application, mais plutôt des choses nécessaires à la VM : typiquement, il contient des chaînes internées, le code d'octet des classes définies, mais aussi d'autres morceaux de données "pas à vous".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X