Shenandoah og ZGC er to avancerede affaldsopsamlere designet til at give lav latens og effektiv affaldsindsamling til Java-applikationer. Her er nogle vigtige fordele ved at bruge disse samlere:
Shenandoah GC:
1. Lave pausetider: Shenandoah GC er designet til at minimere pausetider ved at udføre det meste affaldsopsamlingsarbejde samtidig med applikationen. Dette sikrer, at applikationen forbliver lydhør og yder godt selv under stor hukommelsesbrug[1][3].
2. Samtidig komprimering: Shenandoah GC udfører samtidig komprimering, hvilket betyder, at den komprimerer dyngen, mens applikationen kører. Dette reducerer behovet for fuld affaldsindsamlingspauser og sikrer, at bunken forbliver kompakt og effektiv[1][3].
3. Uafhængig af heapstørrelse: Shenandoah GC's pausetider er uafhængige af heapstørrelsen. Det betyder, at den kan håndtere store dynger uden væsentlige pauser, hvilket gør den velegnet til applikationer, der kræver store hukommelsestildelinger[1][3].
4. Høj gennemløb: Shenandoah GC er designet til at give høj gennemløb ved at minimere den tid, der bruges på affaldsindsamling. Dette sikrer, at applikationen kan fortsætte med at køre effektivt selv under stor hukommelsesbrug[1][3].
ZGC:
1. Lav forsinkelse: ZGC er designet til at give ekstremt lav forsinkelse ved at minimere den tid, der bruges på affaldsindsamling. Det opnås ved at udføre det meste affaldsindsamlingsarbejde samtidig med applikationen og ved at bruge en enkeltgenerations, regionsbaseret tilgang[2].
2. NUMA-Aware: ZGC er designet til at være NUMA-aware, hvilket betyder, at den effektivt kan håndtere store dynger og flere CPU-kerner. Dette sikrer, at skraldeopsamleren kan drage fordel af de tilgængelige hardwareressourcer[2].
3. Høj gennemløb: ZGC er designet til at give høj gennemløb ved at minimere den tid, der bruges på affaldsindsamling. Dette sikrer, at applikationen kan fortsætte med at køre effektivt selv under stor hukommelsesbrug[2].
4. Eksperimentel funktion: ZGC er en eksperimentel funktion, der kræver specifikke kommandolinjeindstillinger for at aktivere. Den er velegnet til applikationer, der kræver meget korte pausetider og kan håndtere store hukommelsestildelinger[2].
Sammenfattende er både Shenandoah og ZGC designet til at give lav latens og effektiv affaldsopsamling til Java-applikationer. De er velegnede til applikationer, der kræver høj kapacitet og kan håndtere store hukommelsesallokeringer.
Citater:[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/