web-dev-qa-db-fra.com

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

Je parcourais le document dans Gestion de la mémoire Java et je suis tombé sur PermSize que je ne comprenais pas. Le document indique qu'il stocke, "JVM stocke ses métadonnées", mais je ne pouvais pas comprendre exactement ce que l'on entend par métadonnées. J'étais en train de googler et quelque part j'ai lu qu'il stocke un objet de valeur (objet défini par l'utilisateur).

Quels types d'objets y sont stockés? Un exemple avec une explication serait génial.

64
Anand

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

"La génération permanente est utilisée pour Contenir des données de réflexion du VM lui-même Telles que des objets de classe et des objets method Ces objets de réflexion sont alloués directement au permanent génération, et il est dimensionné indépendamment des autres générations. " [ref]

En d’autres termes, c’est là que les définitions de classe vont (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 valeur -Xmx définie par l'utilisateur dans les options de la machine virtuelle. Mais MaxPermSize permet à la machine virtuelle Java de pouvoir augmenter la valeur de PermSize au montant spécifié. Initialement, lorsque VM est chargé, la MaxPermSize restera la valeur par défaut (32mb pour -client et 64mb pour -server), mais n'utilisera pas ce montant tant que ce n’est pas nécessaire. D'autre part, si vous définissez BOTH PermSize et MaxPermSize à 256 Mo, vous remarquerez que le segment de mémoire global a augmenté de 256 Mo en plus du paramètre -Xmx.

105
Pascal Thivent

Cet article de blog donne une bonne explication et un peu de contexte. Fondamentalement, la "génération permanente" (dont la taille est donnée par PermSize) est utilisée pour stocker des éléments pour lesquels la machine virtuelle doit allouer de l'espace, mais qui ne seront (normalement) pas ébréchés (donc "permanents") (+). Cela signifie par exemple des classes chargées et des champs statiques. 

Il existe également un FAQ sur la récupération de place directement auprès de Sun, qui répond à certaines questions concernant la génération permanente. Enfin, voici un article blog avec beaucoup de détails techniques.

(+) En fait, des parties de la génération permanente seront enregistrées, par ex. Les objets de classe seront supprimés lorsqu'une classe est déchargée. Mais c'était rare lorsque la génération permanente a été introduite dans la JVM, d'où son nom.

23
sleske

Le pool permanent contient tout ce qui n'est pas vos données d'application, mais plutôt tout ce qui est requis pour la VM: généralement, il contient des chaînes internées, le code d'octet de classes définies, mais aussi d'autres éléments de données "pas les vôtres".

9
ankon

lace pour stocker votre définition de classe chargée et vos métadonnées. Si un projet de base de code volumineux est chargé, la taille insuffisante de la génération de générations permanentes provoquera le populaire Java.Lang.OutOfMemoryError: PermGen.

0
Appesh