37 votes

Java simultané et parallèle GC

Cet article ici suggère d'utiliser -XX:+UseParNewGC « Pour permettre à une jeune génération GC parallèle avec le GC concurrent ».

Ma confusion est que pour permettre à la fois le GC parallèle et simultané, devrais-je

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

PS

J'utilise JVM 6.

38voto

sk. Points 3690

Depuis le document lié est un 1.4.2 VM c'est ce que je vais supposer que vous êtes à l'aide de (Jvm 5 et 6 comportent différemment).

À partir de http://java.sun.com/docs/hotspot/gc1.4.2/

si l'option-XX:+UseConcMarkSweepGC est utilisé sur la ligne de commande puis le drapeau UseParNewGC est également définie sur true si il n'est pas autrement définie explicitement sur l' ligne de commande

Donc la réponse est que vous ne devez utiliser -XX:+UseConcMarkSweepGC et il permettra à l'simultanées collector avec le parallèle de la jeune génération de collecteurs.

Edit: pour la version 6 de Java, le même drapeau (-XX:+UseConcMarkSweepGC) permet simultanément le collecteur. Le choix de collecteur que vous voulez dépend d'un certain nombre de choses, et de tester différentes configurations. Mais il y a certaines orientations très générales. Si vous avez un processeur unique, seul thread à la machine, alors vous devriez utiliser le numéro de série du collecteur (valeur par défaut pour certaines configurations, peut être activé explicitement pour avec -XX:+UseSerialGC). Pour les ordinateurs multiprocesseurs où votre charge de travail est fondamentalement dépendant du PROCESSEUR, utilisation de la parallèle le collecteur. Cette option est activée par défaut si vous utilisez le serveur de drapeau, ou vous pouvez activer explicitement -XX:+UseParallelGC. Si vous préférez garder la GC pauses plus courtes au détriment de l'aide total plus de temps PROCESSEUR pour les GC, et vous avez plus d'un CPU, vous pouvez utiliser simultanément le collecteur (-XX:+UseConcMarkSweepGC). Notez que la concurrente de collecteur a tendance à exiger plus de RAM alloué à la JVM que le numéro de série ou en parallèle des collectionneurs pour une charge de travail donnée, parce que certains de fragmentation de mémoire peut se produire.

7voto

tpoindex Points 231

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

7voto

anjanb Points 5579

5voto

Charles Munger Points 837

Le réglage 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.

2voto

Deven Points 1

ParNew est le collecteur par défaut de la nouvelle génération lorsque CMS est utilisé. Il vous suffit de spécifier -XX: + UseConcMarkSweepGC pour utiliser CMS et ParNew sera utilisé 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.

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