Shenandoah und ZGC sind zwei fortschrittliche Garbage Collectors, die für eine effiziente Garbage Collection mit geringer Latenz für Java-Anwendungen entwickelt wurden. Hier sind einige wichtige Vorteile der Verwendung dieser Kollektoren:
Shenandoah GC:
1. Geringe Pausenzeiten: Shenandoah GC ist darauf ausgelegt, Pausenzeiten zu minimieren, indem die meisten Garbage-Collection-Arbeiten gleichzeitig mit der Anwendung ausgeführt werden. Dadurch wird sichergestellt, dass die Anwendung auch bei hoher Speicherauslastung reaktionsfähig bleibt und eine gute Leistung erbringt[1][3].
2. Gleichzeitige Komprimierung: Shenandoah GC führt eine gleichzeitige Komprimierung durch, was bedeutet, dass der Heap komprimiert wird, während die Anwendung ausgeführt wird. Dies reduziert die Notwendigkeit vollständiger Garbage-Collection-Pausen und stellt sicher, dass der Heap kompakt und effizient bleibt[1][3].
3. Unabhängig von der Heap-Größe: Die Pausenzeiten von Shenandoah GC sind unabhängig von der Heap-Größe. Dies bedeutet, dass es große Heaps ohne nennenswerte Pausen verarbeiten kann, wodurch es für Anwendungen geeignet ist, die große Speicherzuweisungen erfordern[1][3].
4. Hoher Durchsatz: Shenandoah GC ist darauf ausgelegt, einen hohen Durchsatz zu bieten, indem der Zeitaufwand für die Speicherbereinigung minimiert wird. Dadurch wird sichergestellt, dass die Anwendung auch bei hoher Speicherauslastung weiterhin effizient ausgeführt werden kann[1][3].
ZGC:
1. Geringe Latenz: ZGC ist darauf ausgelegt, eine extrem niedrige Latenz zu bieten, indem der Zeitaufwand für die Speicherbereinigung minimiert wird. Dies wird dadurch erreicht, dass die meisten Garbage-Collection-Aufgaben gleichzeitig mit der Anwendung ausgeführt werden und ein regionalbasierter Single-Generation-Ansatz verwendet wird[2].
2. NUMA-fähig: ZGC ist so konzipiert, dass es NUMA-fähig ist, was bedeutet, dass es große Heaps und mehrere CPU-Kerne effizient verarbeiten kann. Dadurch wird sichergestellt, dass der Garbage Collector die verfügbaren Hardwareressourcen nutzen kann[2].
3. Hoher Durchsatz: ZGC ist darauf ausgelegt, einen hohen Durchsatz zu bieten, indem der Zeitaufwand für die Speicherbereinigung minimiert wird. Dadurch wird sichergestellt, dass die Anwendung auch bei hoher Speicherauslastung weiterhin effizient ausgeführt werden kann[2].
4. Experimentelle Funktion: ZGC ist eine experimentelle Funktion, für deren Aktivierung bestimmte Befehlszeilenoptionen erforderlich sind. Es eignet sich für Anwendungen, die sehr kurze Pausenzeiten erfordern und große Speicherbelegungen bewältigen können[2].
Zusammenfassend lässt sich sagen, dass sowohl Shenandoah als auch ZGC darauf ausgelegt sind, Java-Anwendungen mit geringer Latenz und effizienter Speicherbereinigung zu versorgen. Sie eignen sich für Anwendungen, die einen hohen Durchsatz erfordern und große Speicherzuweisungen bewältigen können.
Zitate:[1] https://clojure-goes-fast.com/blog/shenandoah-in-produktion/
[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/