50 votes

-XX:MaxPermSize avec ou sans -XX:PermSize

Nous avons rencontré un Erreur Java.lang.OutOfMemoryError : Espace PermGen et en regardant les paramètres de la JVM de tomcat, on constate qu'à part l'option -Xms y -Xmx nous spécifions également -XX:MaxPermSize=128m . Après un peu de profilage, je peux voir qu'une collecte de déchets se produit occasionnellement dans l'espace PermGen, ce qui l'empêche de se remplir.

Ma question est la suivante : à part augmenter le -XX:MaxPermSize quelle serait la différence si je spécifie également -XX:PermSize ? Je sais que la mémoire totale serait alors de Xmx+maxPermSize mais y a-t-il une autre raison pour laquelle -XX:PermSize devrait no être là quand -XX:MaxPermSize est spécifié ?

Si vous avez une expérience concrète de ces paramètres JVM, n'hésitez pas à nous en faire part.

ps. La JVM est HotSpot 64bit Server VM build 16.2-b04.

44voto

codebrickie Points 6067

-XX:PermSize spécifie la taille initiale qui sera allouée lors du démarrage de la JVM. Si nécessaire, la JVM allouera jusqu'à -XX:MaxPermSize .

25voto

Mark Rotteveel Points 20766

En jouant avec des paramètres comme -XX:PermSize y -Xms vous pouvez régler les performances de - par exemple - le démarrage de votre application. Je ne l'ai pas regardé récemment, mais il y a quelques années, la valeur par défaut du paramètre -Xms était de l'ordre de 32MB (je pense), si votre application nécessitait beaucoup plus que cela, elle déclencherait un certain nombre de cycles de remplissage de la mémoire - garbage collect complet - augmentation de la mémoire etc. jusqu'à ce qu'elle ait chargé tout ce dont elle avait besoin. Ce cycle peut être préjudiciable aux performances de démarrage, donc l'attribution immédiate du nombre requis pourrait améliorer le démarrage.

Un cycle similaire est appliqué à la génération permanente. Le réglage de ces paramètres peut donc améliorer le démarrage (entre autres).

AVERTISSEMENT La JVM dispose de beaucoup d'optimisation et d'intelligence lorsqu'il s'agit d'allouer de la mémoire, de diviser l'espace eden et les anciennes générations, etc. -Xms égal à -Xmx o -XX:PermSize égal à -XX:MaxPermSize car cela supprimera certaines des optimisations que la JVM peut appliquer à ses stratégies d'allocation et réduira donc les performances de votre application au lieu de les améliorer.

Comme toujours : effectuez des mesures non triviales pour prouver que vos modifications améliorent réellement les performances globales (par exemple, en améliorant le temps de démarrage). podría être désastreux pour les performances pendant l'utilisation de l'application)

7voto

mijer Points 1971

Si vous souhaitez améliorer les performances, il est souvent recommandé de définir les deux paramètres suivants -XX:PermSize y -XX:MaxPermSize à la même valeur pour augmenter JVM l'efficacité.

Voici quelques informations :

  1. Prise en charge du tas de grandes pages sur les plates-formes x86 et amd64
  2. Support Java pour les grandes pages de mémoire
  3. Définition de la taille de la génération permanente

Vous pouvez également spécifier -XX:+CMSClassUnloadingEnabled pour activer le déchargement des classes si vous utilisez l'option CMS GC . Il peut contribuer à diminuer la probabilité de Java.lang.OutOfMemoryError: PermGen space

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