Die Hauptanwendungsfälle für Shenandoah und ZGC sind:
Shenandoah GC:
1. Geringe Latenz: Shenandoah ist darauf ausgelegt, Pausenzeiten zu minimieren, indem die meisten Garbage-Collection-Aufgaben 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.
2. Hoher Durchsatz: Shenandoah 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.
3. Große Heaps: Shenandoah ist für die effiziente Verarbeitung großer Heaps konzipiert und eignet sich daher für Anwendungen, die große Speicherzuweisungen erfordern.
4. Konstante Zuweisung: Shenandoah eignet sich für Anwendungen mit konstanter Zuweisung und Nutzung von Objekten, da es dies effizient bewältigen kann.
5. Ältere Objekte: Shenandoah eignet sich für Anwendungen, bei denen Objekte älter sind und der Aufwand für die Erstellung neuer Objekte gering ist, da dies effizient erledigt werden kann.
6. Containernutzung: Shenandoah kann in Containerumgebungen verwendet werden, dies hängt jedoch vom spezifischen Anwendungsfall ab.
ZGC:
1. Geringe Latenz: ZGC 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.
2. 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.
3. Große Heaps: ZGC ist für die effiziente Verarbeitung großer Heaps konzipiert und eignet sich daher für Anwendungen, die große Speicherzuweisungen erfordern.
4. 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.
5. Experimentelle Funktion: ZGC ist eine experimentelle Funktion und erfordert zur Aktivierung bestimmte Befehlszeilenoptionen. Es eignet sich für Anwendungen, die sehr kurze Pausenzeiten erfordern und große Speicherbelegungen bewältigen können.
Zusammenfassend lässt sich sagen, dass sowohl Shenandoah als auch ZGC auf geringe Latenz und hohen Durchsatz ausgelegt sind und sich daher für Anwendungen eignen, die eine effiziente Speicherverwaltung erfordern.
Zitate:[1] https://www.opsian.com/blog/aleksey-shipilev-shenandoah-concurrent-gcs/
[2] https://clojure-goes-fast.com/blog/shenandoah-in-produktion/
[3] https://wiki.openjdk.org/display/shenandoah/Main
[4] https://www.diva-portal.org/smash/get/diva2:1466940/FULLTEXT01.pdf
[5] https://developers.redhat.com/articles/2024/05/28/beginners-guide-shenandoah-garbage-collector