Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon jakie są korzyści z używania Shenandoah lub ZGC do zbierania śmieci


jakie są korzyści z używania Shenandoah lub ZGC do zbierania śmieci


Shenandoah i ZGC to dwa zaawansowane moduły zbierające elementy bezużyteczne zaprojektowane w celu zapewnienia wydajnego usuwania elementów bezużytecznych z niskimi opóźnieniami dla aplikacji Java. Oto kilka kluczowych korzyści wynikających ze stosowania tych kolektorów:

Shenandoah GC:

1. Krótki czas pauzy: Shenandoah GC został zaprojektowany tak, aby minimalizować czasy pauzy poprzez wykonywanie większości prac związanych ze zbieraniem śmieci jednocześnie z aplikacją. Dzięki temu aplikacja pozostaje responsywna i działa dobrze nawet przy dużym obciążeniu pamięci[1] [3].

2. Zagęszczanie współbieżne: Shenandoah GC wykonuje zagęszczanie współbieżne, co oznacza, że ​​zagęszcza stertę podczas działania aplikacji. Zmniejsza to potrzebę pełnych przerw w usuwaniu elementów bezużytecznych i zapewnia, że ​​sterta pozostaje zwarta i wydajna[1] [3].

3. Niezależnie od wielkości sterty: Czasy pauzy Shenandoah GC są niezależne od wielkości sterty. Oznacza to, że może obsługiwać duże sterty bez znaczących przerw, dzięki czemu nadaje się do aplikacji wymagających dużych alokacji pamięci[1] [3].

4. Wysoka przepustowość: Shenandoah GC został zaprojektowany tak, aby zapewnić wysoką przepustowość poprzez minimalizację czasu spędzanego na zbieraniu śmieci. Dzięki temu aplikacja może nadal działać wydajnie nawet przy dużym obciążeniu pamięci[1] [3].

ZGC:

1. Niskie opóźnienia: ZGC zaprojektowano tak, aby zapewnić wyjątkowo małe opóźnienia, minimalizując czas spędzony na zbieraniu śmieci. Osiąga to poprzez wykonywanie większości prac związanych z usuwaniem elementów bezużytecznych jednocześnie z aplikacją i stosując podejście pojedynczej generacji oparte na regionie[2].

2. NUMA-Aware: ZGC zaprojektowano tak, aby obsługiwał NUMA, co oznacza, że ​​może wydajnie obsługiwać duże sterty i wiele rdzeni procesora. Dzięki temu moduł zbierający elementy bezużyteczne będzie mógł wykorzystać dostępne zasoby sprzętowe[2].

3. Wysoka przepustowość: ZGC został zaprojektowany, aby zapewnić wysoką przepustowość poprzez minimalizację czasu spędzanego na zbieraniu śmieci. Dzięki temu aplikacja może nadal działać wydajnie nawet przy dużym zużyciu pamięci[2].

4. Funkcja eksperymentalna: ZGC to funkcja eksperymentalna, której włączenie wymaga określonych opcji wiersza poleceń. Nadaje się do aplikacji wymagających bardzo krótkich czasów pauzy i może obsługiwać duże alokacje pamięci[2].

Podsumowując, zarówno Shenandoah, jak i ZGC zostały zaprojektowane w celu zapewnienia niskiego opóźnienia i wydajnego usuwania elementów bezużytecznych dla aplikacji Java. Nadają się do zastosowań wymagających dużej przepustowości i mogą obsługiwać duże alokacje pamięci.

Cytaty:
[1] https://clojure-goes-fast.com/blog/shenandoah-in-production/
[2] https://developers.redhat.com/articles/2021/11/02/how-choose-best-java-garbage-collector
[3] https://www.reddit.com/r/feedthebeast/comments/r24zg4/upgrade_your_java_to_one_that_has_the_shenandoah/
[4] https://stackoverflow.com/questions/64252590/how-does-clr-gc-compare-to-latest-zgc-and-shenandoah-gc-on-jvm
[5] https://www.uber.com/blog/jvm-tuning-garbage-collection/