web-dev-qa-db-fra.com

Que fait -XX: MaxPermSize?

En particulier, pourquoi aider à résoudre un problème de PermGen OutOfMemoryError?

De plus, des points bonus pour une réponse qui me renvoie à la documentation sur les arguments de la JVM ...

237
Geoff

L'espace permanent est l'endroit où les classes, les méthodes, les chaînes internalisées et les objets similaires utilisés par le VM sont stockés et ne sont jamais désalloués (d'où le nom).

Cet article Oracle présente succinctement le fonctionnement et le paramétrage du GC HotSpot et vous conseille d'augmenter cet espace si vous chargez plusieurs classes (c'est généralement le cas pour les serveurs d'applications et certains IDE comme Eclipse):

La génération permanente n'a pas d'impact significatif sur les performances du ramasse-miettes pour la plupart des applications. Cependant, certaines applications génèrent et chargent dynamiquement de nombreuses classes; par exemple, certaines implémentations de pages JSP (JavaServer Pages). Ces applications peuvent nécessiter une génération permanente plus importante pour contenir les classes supplémentaires. Si tel est le cas, la taille maximale de la génération permanente peut être augmentée à l'aide de l'option de ligne de commande -XX: MaxPermSize =.

Notez que cette autre documentation Oracle répertorie les autres arguments HotSpot.

Mise à jour: À partir de Java 8, l'espace de permgen et ce paramètre ont disparu. Le modèle de mémoire utilisé pour les classes et méthodes chargées est différent et n'est pas limité (avec les paramètres par défaut). Vous ne devriez plus voir cette erreur.

253
Denys Séguret

-XX:PermSize -XX:MaxPermSize sont utilisés pour définir la taille de la génération permanente.

Génération permanente: La génération permanente est l'endroit où les fichiers de classe sont conservés. Celles-ci sont le résultat de classes compilées et de pages JSP. Si cet espace est saturé, une récupération de place complète est déclenchée. Si la récupération complète ne parvient pas à effacer les anciennes classes non référencées et qu'il ne reste plus de place pour agrandir l'espace permanent, une erreur de mémoire insuffisante (OOME) est générée et la JVM se bloque.

86
stones333

Dans Java 8, ce paramètre est couramment utilisé pour imprimer un message d'avertissement du type de celui-ci:

Serveur 64 bits Java HotSpot (TM) VM warning: option ignorée MaxPermSize = 512m; le support a été supprimé dans 8.0

La raison pour laquelle vous recevez ce message dans Java 8 est que Permgen a été remplacé par Metaspace pour résoudre certains de ses inconvénients (comme vous avez pu le constater par vous-même, l'un de ces inconvénients Taille).

FYI: un article sur Metaspace: http://Java-latte.blogspot.in/2014/03/metaspace-in-Java-8.html

45
AndrewBourgeois