280 votes

Que fait -XX:MaxPermSize ?

Plus précisément, pourquoi serait-il utile de corriger 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...

0 votes

6 votes

oracle.com/technetwork/java/javase/tech/ Comment allez-vous me donner ces points bonus maintenant ? :)

1 votes

@PaulTomblin Je ne suis pas sûr que le type dont l'article que vous mettez en lien (le premier résultat par Google) ait la moindre idée de ce dont il parle.

292voto

dystroy Points 145126

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

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

La génération permanente n'a pas d'impact notable sur les performances du garbage collector. sur les performances du collecteur de déchets pour la plupart des applications. Cependant, certaines applications génèrent et chargent dynamiquement de nombreuses classes, par exemple certaines implémentations de pages JavaServer Pages (JSP). Ces applications applications peuvent avoir besoin d'une génération permanente plus importante pour contenir les classes supplémentaires. Dans ce cas, la taille maximale de la génération permanente peut être augmentée avec l'option de ligne de commande -XX:MaxPermSize=.

Notez que cette autre documentation Oracle liste les autres arguments du HotSpot.

Mise à jour : À partir de Java 8, l'espace 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.

95voto

stones333 Points 1112

-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ù sont conservés les fichiers de classe. Ceux-ci sont le résultat de la compilation des classes et des pages JSP. Si cet espace est plein, cela déclenche un Full Garbage Collection. Si cette dernière ne peut pas éliminer les anciennes classes non référencées et qu'il n'y a plus de place pour étendre l'espace permanent, une erreur OOME (Out-of-Memory error) est déclenchée et la JVM s'arrête.

0 votes

N'est-ce pas supprimé sur JDK > 8 ou fixé avec JDK 11 sur toutes les VMs ?

52voto

AndrewBourgeois Points 691

En Java 8, ce paramètre est généralement utilisé pour imprimer un message d'avertissement comme celui-ci :

Avertissement de la VM Java HotSpot(TM) 64-Bit Server : ignorer l'option MaxPermSize=512m ; cette option a été supprimée dans la version 8.0.

La raison pour laquelle vous obtenez ce message en Java 8 est que Permgen a été remplacé par Metaspace pour remédier à certains des inconvénients de PermGen (comme vous avez pu le constater par vous-même, l'un de ces inconvénients est qu'il avait une taille fixe).

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

6 votes

Voir aussi : Élimination de PermGen dans le JDK 8 (stackoverflow).

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