2015-11-25 13 views
6

Attualmente stiamo utilizzando il garbage collector incrementale aggiungendo -Xincgc al comando java. In JDK 8 questo switch è deprecato. Quindi qual è il sostituto equivalente per questo? -XX:+UseG1GC?-XX: + UseG1GC è la sostituzione corretta per -Xincgc?

Sfondo: l'applicazione ha un mucchio di 8 GB e crea molti oggetti viventi corti. Ho notato che spesso si interrompeva per qualche secondo per eseguire la garbage collection. Per curiosità ho aggiunto il -Xincgc e ho scoperto che le pause erano sparite e le prestazioni generali migliorate ~ 4 volte.

Purtroppo non ho trovato alcuna informazione su quale tipo di garbage collector i trigger -Xincgc. C'è il CMS (Concurrent mark e sweep) e il nuovo G1 (Garbage first). Ma cosa ottengo con -Xincgc?

risposta

7

Per Oracle/OpenJDK 8 il collector predefinito sulla maggior parte delle macchine è Parallel Throughput Collector, ad eccezione di alcune macchine Windows a 32 bit in cui può essere il Serial GC.

Xincgc è CMS in modalità incrementale. Il vantaggio principale che si sta vedendo probabilmente è causato dal passaggio da Throughput Collector a CMS, non dalla modalità incrementale, progettata per CPU single-core.

Incremental Mode is also deprecated, in modo semplice abilitare CMS tramite -XX:+UseConcMarkSweepGC e vedere se questo funziona per voi.

Ovviamente si può anche provare G1GC, che è anche progettato per raggiungere obiettivi di bassa durata e ha il vantaggio che non soffre di frammentazione come CMS e quindi è meno probabile che si verifichino guasti concomitanti della modalità che si traducono in un single-threaded ferma la collezione del mondo.

Quindi, provare entrambi e misurare.

Consulta anche: Oracle's Java 8 GC Tuning Guides

+0

Risposta molto dettagliata! Grazie. Ho intenzione di provare '-XX: + UseConcMarkSweepGC' e' -XX: + UseG1GC' e vedere cosa ottengo. – BetaRide

+0

Siamo spiacenti. Ho aggiunto nel posto sbagliato. È per OP. Lo rimuoverò. –

1

Fino a questa opzione completamente deprecato da Oracle nella versione più recente. Potremmo comunque utilizzare questo, applicando le seguenti params JVM:

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

I successivi 2 parametri sono per l'accesso attività GC.

Problemi correlati