2015-11-25 9 views
6

Obecnie używamy inkrementalnego garbage collectera, dodając -Xincgc do polecenia java. W JDK 8 ten przełącznik jest przestarzały. Więc jaki jest zastępczy odpowiednik tego? -XX:+UseG1GC?Czy -XX: + UżyjG1GC poprawnym zamiennikiem -Xincgc?

Tło: Aplikacja ma stertę 8 GB i tworzy wiele krótkich, żywych obiektów. Zauważyłem, że często zatrzymywało się na kilka sekund, aby przeprowadzić zbieranie śmieci. Z ciekawości dodałem -Xincgc i stwierdziłem, że pauzy zniknęły, a ogólna wydajność poprawiła się ~ 4 razy.

Niestety, nie znalazłem żadnej informacji o tym, jaki typ wyrzutnika śmieci wywołuje -Xincgc. Jest CMS (znak równoczesny i zamiatanie) i nowy G1 (najpierw Garbage). Ale co dostanę z -Xincgc?

Odpowiedz

7

Dla Oracle/OpenJDK 8 domyślnym kolektorem na większości maszyn jest Parallel Throughput Collector, , z wyjątkiem niektórych 32-bitowych maszyn Windows, w których może to być Serial GC.

Xincgc jest CMS w trybie przyrostowym. Główna korzyść, jaką widzisz, prawdopodobnie wynika z przejścia z modułu zbierającego przepustowość na CMS, a nie z trybu przyrostowego, który jest przeznaczony dla jednordzeniowych procesorów.

Incremental Mode is also deprecated, więc po prostu włącz CMS przez -XX:+UseConcMarkSweepGC i sprawdź, czy to działa.

Oczywiście można również wypróbować G1GC, który został zaprojektowany tak, aby osiągnąć niskie cele czasowe i ma tę zaletę, że nie cierpi z powodu fragmentacji, jak CMS, a zatem jest mniej prawdopodobne, że wystąpią awarie w trybie współbieżnym, które skutkują jednowątkowe zatrzymują światową kolekcję.

Spróbuj więc i zmierzyć.

Zobacz także: Oracle's Java 8 GC Tuning Guides

+0

Bardzo szczegółowa odpowiedź! Dzięki. Mam zamiar wypróbować '-XX: + UseConcMarkSweepGC' i' -XX: + UseG1GC' i zobaczyć, co otrzymam. – BetaRide

+0

Przepraszamy. Dodałem w niewłaściwym miejscu. To dla OP. Usunę to. –

1

Do tej opcji całkowicie nieaktualnych przez Oracle w nowszej wersji. Nadal możemy tego użyć, stosując następujące parametry jvm:

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

Późniejsze 2 parametry służą do logowania w czynnościach GC.

Powiązane problemy