Shenandoah a ZGC jsou dva pokročilé garbage collectory navržené tak, aby poskytovaly nízkou latenci a efektivní garbage collection pro Java aplikace. Zde jsou některé klíčové výhody používání těchto kolektorů:
Shenandoah GC:
1. Nízká doba pauzy: Shenandoah GC je navržen tak, aby minimalizoval doby pauzy tím, že většinu prací na sběru odpadu provádí souběžně s aplikací. To zajišťuje, že aplikace zůstane responzivní a funguje dobře i při velkém využití paměti[1][3].
2. Souběžné zhutňování: Shenandoah GC provádí souběžné zhutňování, což znamená, že komprimuje haldu, když je aplikace spuštěna. To snižuje potřebu úplných pauz pro sběr odpadu a zajišťuje, že halda zůstane kompaktní a efektivní[1][3].
3. Nezávislé na velikosti haldy: Časy pauz Shenandoah GC jsou nezávislé na velikosti haldy. To znamená, že zvládne velké hromady bez výrazných přestávek, takže je vhodný pro aplikace, které vyžadují velké alokace paměti[1][3].
4. Vysoká propustnost: Shenandoah GC je navržen tak, aby poskytoval vysokou propustnost minimalizací času stráveného sběrem odpadu. To zajišťuje, že aplikace může nadále efektivně běžet i při velkém využití paměti[1][3].
ZGC:
1. Nízká latence: ZGC je navržen tak, aby poskytoval extrémně nízkou latenci tím, že minimalizuje čas strávený sběrem odpadu. Dosahuje toho prováděním většiny prací na sběru odpadu souběžně s aplikací a použitím jednogeneračního přístupu založeného na regionech[2].
2. NUMA-Aware: ZGC je navrženo tak, aby podporovalo NUMA, což znamená, že dokáže efektivně zvládnout velké hromady a více jader CPU. To zajišťuje, že garbage collector může využívat dostupné hardwarové prostředky[2].
3. Vysoká propustnost: ZGC je navržen tak, aby poskytoval vysokou propustnost minimalizací času stráveného sběrem odpadu. To zajišťuje, že aplikace může nadále efektivně běžet i při velkém využití paměti[2].
4. Experimentální funkce: ZGC je experimentální funkce, která k aktivaci vyžaduje specifické možnosti příkazového řádku. Je vhodný pro aplikace, které vyžadují velmi krátké pauzy a zvládnou velké alokace paměti[2].
Stručně řečeno, Shenandoah i ZGC jsou navrženy tak, aby poskytovaly nízkou latenci a efektivní shromažďování odpadků pro aplikace Java. Jsou vhodné pro aplikace, které vyžadují vysokou propustnost a zvládnou velké alokace paměti.
Citace:[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/