Il y a beaucoup d'arguments JVM qui affectent l'utilisation de la mémoire de la JVM comme -Xms, -Xmx, -Xns, -XX:MaxPermSize...
OutOfMemoryError
, StackOverflowError
...)?Je ne trouve pas de bon aide-mémoire pour eux - créons-en un ici.
-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.
Des centaines d'options JVM sont disponibles. Fondamentalement, ils sont classés en trois types:
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.
Lire les options JVM expliquées . En voici des extraits:
Java.lang.OutOfMemoryError: Java heap space
erreurs que vous devez augmenter -Xmx
valeur.-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.-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.