A Shenandoah és a ZGC két fejlett szemétgyűjtő, amelyek alacsony késleltetésű és hatékony szemétgyűjtést biztosítanak a Java alkalmazások számára. Íme néhány fő előnye a gyűjtők használatának:
Shenandoah GC:
1. Alacsony szünetidők: A Shenandoah GC-t úgy tervezték, hogy minimalizálja a szünetidőket, mivel a legtöbb szemétszállítási munkát az alkalmazással egyidejűleg végzi. Ez biztosítja, hogy az alkalmazás érzékeny maradjon, és még nagy memóriahasználat mellett is jól működjön[1][3].
2. Egyidejű tömörítés: A Shenandoah GC párhuzamos tömörítést hajt végre, ami azt jelenti, hogy az alkalmazás futása közben tömöríti a kupacot. Ez csökkenti a teljes szemétgyűjtési szünetek szükségességét, és biztosítja, hogy a kupac kompakt és hatékony maradjon[1][3].
3. Független a kupac méretétől: A Shenandoah GC szünetideje független a kupac méretétől. Ez azt jelenti, hogy jelentősebb szünetek nélkül képes kezelni a nagy kupacokat, így alkalmas a nagy memóriafoglalást igénylő alkalmazásokhoz[1][3].
4. Nagy áteresztőképesség: A Shenandoah GC-t úgy tervezték, hogy nagy áteresztőképességet biztosítson a szemétszállításra fordított idő minimalizálásával. Ez biztosítja, hogy az alkalmazás továbbra is hatékonyan tudjon futni még nagy memóriahasználat mellett is[1][3].
ZGC:
1. Alacsony késleltetés: A ZGC-t úgy tervezték, hogy rendkívül alacsony késleltetést biztosítson azáltal, hogy minimalizálja a szemétszállításra fordított időt. Ezt úgy éri el, hogy a legtöbb szemétszállítási munkát az alkalmazással párhuzamosan végzi, és egy generációs, régióalapú megközelítést alkalmaz[2].
2. NUMA-Aware: A ZGC-t úgy tervezték, hogy NUMA-tudatos legyen, ami azt jelenti, hogy hatékonyan képes kezelni a nagy kupacokat és a több CPU magot. Ez biztosítja, hogy a szemétgyűjtő kihasználhassa a rendelkezésre álló hardver erőforrásokat[2].
3. Nagy áteresztőképesség: A ZGC-t úgy tervezték, hogy nagy áteresztőképességet biztosítson azáltal, hogy minimálisra csökkenti a szemétszállításra fordított időt. Ez biztosítja, hogy az alkalmazás továbbra is hatékonyan tudjon futni még nagy memóriahasználat mellett is[2].
4. Kísérleti szolgáltatás: A ZGC egy kísérleti szolgáltatás, amelynek engedélyezéséhez speciális parancssori beállítások szükségesek. Alkalmas olyan alkalmazásokhoz, amelyek nagyon rövid szünetet igényelnek, és nagy memóriafoglalásokat is képesek kezelni[2].
Összefoglalva, mind a Shenandoah, mind a ZGC célja, hogy alacsony késleltetésű és hatékony szemétgyűjtést biztosítson a Java alkalmazások számára. Alkalmasak olyan alkalmazásokhoz, amelyek nagy átviteli sebességet igényelnek, és képesek kezelni a nagy memóriafoglalásokat.
Idézetek:[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/