Question

Cet article ici suggère d'utiliser -XX: + UseParNewGC "Activer une GC de jeune génération parallèle avec le GC simultané".

Ma confusion est que, pour activer les GC parallèles et simultanés, devrais-je

  • utilisez -XX: + UseParNewGC ou
  • utiliser à la fois -XX: + UseParNewGC et -XX: + UseConcMarkSweepGC ?

PS

J'utilise JVM 6.

Était-ce utile?

La solution

Étant donné que le document que vous avez lié était destiné à une machine virtuelle 1.4.2, je suppose que vous utilisez (les machines virtuelles 5 et 6 se comportent différemment).

De http://java.sun.com/docs/hotspot/gc1. 4.2 /

  

si -XX: + UseConcMarkSweepGC est utilisé sur   la ligne de commande puis le drapeau   UseParNewGC est également défini sur true s'il   n'est pas par ailleurs explicitement défini sur le   ligne de commande

La réponse est donc qu'il vous suffit d'utiliser -XX: + UseConcMarkSweepGC pour activer le collecteur simultané avec le collecteur parallèle de nouvelle génération.

Edition: pour Java 6, le même drapeau (-XX: + UseConcMarkSweepGC) active le collecteur simultané. Le choix du collecteur souhaité dépend de quelques éléments et vous devez tester différentes configurations. Mais il existe des directives très générales. Si vous avez un seul processeur, une machine à thread unique, vous devez utiliser le collecteur série (par défaut pour certaines configurations, peut être activé explicitement pour avec -XX: + UseSerialGC). Pour les ordinateurs multiprocesseurs où votre charge de travail est essentiellement liée au processeur, utilisez le collecteur parallèle. Ceci est activé par défaut si vous utilisez l'indicateur -server, ou vous pouvez l'activer explicitement avec -XX: + UseParallelGC. Si vous préférez raccourcir les pauses du CPG au détriment de l'utilisation de plus de temps CPU total pour le CPG et que vous disposez de plus d'un CPU, vous pouvez utiliser le collecteur simultané (-XX: + UseConcMarkSweepGC). Notez que le collecteur simultané a tendance à nécessiter plus de RAM allouée à la machine virtuelle que les collecteurs en série ou en parallèle pour une charge de travail donnée car une fragmentation de la mémoire peut se produire.

Autres conseils

java / réglage JDK 6 GC: http: //www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html . Cela vient de SUN (maintenant Oracle). Le plein de choses.

Voir aussi
  http://www.javaperformancetuning.com/

Cette entrée de blog présente une liste détaillée des différents collectionneurs et des options valides: http : //blogs.oracle.com/jonthecollector/entry/our_collectors

Le réglage de Java GC est fondamentalement un art sombre, mais dans mon application (fonctionne avec un segment de mémoire de plus de 50 Go et 16 cœurs physiques), le collecteur ConcMarkSweep entraînait une accélération 3 fois supérieure à la valeur par défaut du serveur, et une accélération 2,2 fois supérieure ParallelOldGC.

Si vous ne partagez pas la machine avec d'autres processus (les cœurs inactifs sont simplement gaspillés), utilisez ConcMarkSweepGC.

ParNew est le collecteur par défaut de la nouvelle génération lorsque CMS est utilisé. Vous devez simplement spécifier -XX: + UseConcMarkSweepGC pour utiliser CMS et ParNew le sera par défaut. CMS est un bon collecteur si la priorité la plus élevée est d’éviter les tremblements du GC, mais si le débit est plus important, par exemple pour un lot comme un travail, le collecteur parallèle SUN par défaut fait un meilleur travail.

Vous ne pouvez pas activer deux options du CPG en même temps. Je vous suggérerais d’utiliser le système de gestion de contenu (CMS), qui est meilleur que celui de la génération suivante, comparé à UseParNewGC. et si vous utilisez Java 1.7 ou une version ultérieure et que la taille de segment de mémoire est relativement plus grande (comme> 4 Go), envisagez d’utiliser G1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top