web-dev-qa-db-fra.com

-XX: + UseG1GC est-il le remplacement correct pour -Xincgc?

Actuellement, nous utilisons le garbage collector incrémentiel en ajoutant -Xincgc à la commande Java. Dans JDK 8 ce commutateur est déconseillé. Donc quel est le remplacement équivalent pour elle? -XX:+UseG1GC?

Contexte: L'application a un tas de 8 Go et crée beaucoup d'objets vivants courts. J'ai remarqué qu'il s'arrêtait souvent pendant quelques secondes pour faire la collecte des ordures. Par curiosité, j'ai ajouté le -Xincgc et a constaté que les pauses avaient disparu et que les performances globales avaient été améliorées ~ 4 fois.

Malheureusement, je n'ai trouvé aucune information sur quel type de ramasse-miettes le -Xincgc déclenche. Il y a le [~ # ~] cms [~ # ~] (Marque et balayage simultanés) et le nouveau G1 (Ordures d'abord). Mais qu'est-ce que j'obtiens avec -Xincgc?

10
BetaRide

Pour Oracle/OpenJDK 8, le collecteur par défaut sur la plupart des machines est le collecteur de débit parallèle, à l'exception de certaines machines Windows 32 bits où il peut s'agir du GC série.

Xincgc est CMS en mode incrémentiel. Le principal avantage que vous voyez est probablement dû au passage du collecteur de débit au CMS, et non au mode incrémentiel, qui est conçu pour les processeurs monocœur.

Le mode incrémentiel est également déconseillé , il suffit donc d'activer le CMS via -XX:+UseConcMarkSweepGC et voyez si cela fonctionne pour vous.

Bien sûr, vous pouvez également essayer G1GC, qui est également conçu pour atteindre des objectifs de temps de pause bas et a l'avantage de ne pas souffrir de fragmentation comme le fait CMS et est donc moins susceptible de rencontrer des échecs de mode simultané qui entraînent un arrêt à un seul thread la collection du monde.

Alors, essayez les deux et mesurez.

Voir aussi: Oracle's Java 8 GC Tuning Guides

12
the8472

Jusqu'à cette option complètement déconseillée par Oracle dans la version la plus récente. Nous pourrions toujours l'utiliser, en appliquant les paramètres jvm suivants:

-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

Les 2 derniers paramètres servent à se connecter aux activités du GC.

2
Tim Long