web-dev-qa-db-fra.com

Quels arguments représentent quoi dans les options de mémoire JVM?

Il y a beaucoup d'arguments JVM qui affectent l'utilisation de la mémoire de la JVM comme -Xms, -Xmx, -Xns, -XX:MaxPermSize...

  • Que font-ils?
  • Y en a-t-il d'autres?
  • Laquelle dois-je augmenter lorsque j'obtiens quelle erreur (par exemple OutOfMemoryError, StackOverflowError...)?

Je ne trouve pas de bon aide-mémoire pour eux - créons-en un ici.

23

-Xms: cette option définit la taille initiale et minimale Java taille du tas.

-Xmx: Cette option définit la taille maximale du Java tas. Le tas Java (le "tas")) est la partie de la mémoire où les blocs de la mémoire est allouée aux objets et libérée lors du garbage collection.

-XX:PermSize:-XX:MaxPermSize: sont utilisés pour définir la taille de la génération permanente. L'espace permanent est l'endroit où sont stockés la classe, les méthodes, les chaînes internalisées et les objets similaires utilisés par le VM et jamais désalloués (d'où le nom).

-Xss: définit la taille de la pile de threads. Les piles de threads sont des zones de mémoire allouées à chaque Java thread pour leur usage interne. C'est là que le thread stocke son état d'exécution local.

-Xns: définit la taille de la pépinière. la machine virtuelle Java JRockit utilise une pépinière lorsque le modèle de récupération de place générationnel est utilisé, c'est-à-dire lorsque le garbage collector dynamique a déterminé que le modèle de récupération de place générationnelle doit être utilisé ou lorsque le garbage collector générationnel simultané statique (-Xgc: gencon) a été choisi. Vous pouvez également utiliser -Xns pour définir une taille de nurserie statique lors de l'exécution d'un garbage collector dynamique (-XgcPrio).

  • Si vous obtenez Java.lang.OutOfMemoryError: Java heap space que de modifier la valeur de -Xmx et -Xms.

  • si vous obtenez Java.lang.OutOfMemoryError: PermGen space que d'essayer d'augmenter le - XX:MaxPermSize valeur.

  • si vous obtenez Java.lang.StackOverflowError que d'essayer d'augmenter le -Xss valeur. Cela peut être utile en augmentant la taille de la pile, mais vous devriez également consulter votre code.

48
Trying

Des centaines d'options JVM sont disponibles. Fondamentalement, ils sont classés en trois types:

  1. Options standard,
  2. Options X non standard,
  3. Options XX non standard,

Liste de quelques options standard: [Pour voir la liste complète, exécutez la commande "Java" sans aucune option]

 -client       to select the "client" VM
 -server       to select the "server" VM
 -cp <class search path of directories and Zip/jar files>
 -classpath <class search path of directories and Zip/jar files>
               A ; separated list of directories, JAR archives,
               and Zip archives to search for class files.
 -D<name>=<value>
               set a system property
 -version      print product version and exit
 -showversion  print product version and continue
 -X            print help on non-standard options`

Liste de quelques options X non standard: [Pour voir la liste complète exécutez la commande "Java -X"]

-Xincgc           enable incremental garbage collection
-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set Java thread stack size
-Xprof            output cpu profiling data
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only

Liste de quelques options XX non standard: [Liste complète disponible ici ]

-XX:InitialHeapSize=<size>        set initial Java heap size. Same as -Xms<size>.
-XX:MaxHeapSize=<size>            set maximum Java heap size. Same as -Xmx<size>.
-XX:+PrintFlagsFinal              prints all JVM options passed.
-XX:+UnlockDiagnosticVMOptions    opens up lot more VM options.

Si vous souhaitez approfondir vos connaissances sur les options JVM, veuillez consulter ce blog . Le lien n'est qu'une partie 1 sur 8. Découvrez et lisez également d'autres parties.

11
Karthik Bose

Lire les options JVM expliquées . En voici des extraits:

  • Si vous recevez fréquemment Java.lang.OutOfMemoryError: Java heap space erreurs que vous devez augmenter -Xmx valeur.
  • Normalement -XX:PermSize et -XX:MaxPermSize n'a pas besoin d'être ajusté mais si vous voyez Java.lang.OutOfMemoryError: PermGen space événements, vous pouvez souvent augmenter ces valeurs.
  • -XX:MaxJavaStackTraceDepth - Ceci spécifie combien d'entrées une trace de pile pour une erreur ou une exception levée peut avoir avant qu'un StackOverflowError ne soit levé. Donc, si vous traitez d'énormes traces de pile, vous pouvez utiliser cette option pour augmenter les entrées autorisées avant le débordement.
1
naXa

-Xss: taille de la pile.

Utilisé pour définir la taille de votre pile. Les valeurs de pile n'existent que dans la portée de la fonction dans laquelle elles sont créées. Une fois la fonction revenue, elles sont supprimées.

Le moyen le plus simple de manquer d'espace de pile est de récurer trop profondément.

-Xms, -Xmx: taille de tas min et max.

Utilisé pour définir la taille de votre tas. Le tas est l'endroit où vous allouez des objets. Les objets persistent jusqu'à ce qu'ils soient récupérés.

Le moyen le plus simple de manquer d'espace de tas est d'allouer quelque chose de massif.

-XX: MaxPermSize: génération permanente.

La génération permanente est spéciale car elle contient les données nécessaires à la machine virtuelle pour décrire des objets qui n'ont pas d'équivalence au niveau du langage Java. Par exemple, les objets décrivant les classes et les méthodes sont stockés dans le permanent génération.

Vous manquez généralement d'espace permgen si vous perdez en quelque sorte des références aux classes que vous chargez dynamiquement. Cela afflige certains conteneurs Web en particulier.

1
Markus Koivisto