© Swill Klitch/Shutterstock.com
Shenandoah und ZGC

Kurze Pause


Mit Shenandoah und ZGC gibt es im OpenJDK erstmals zwei Low-Pause Garbage Collectors, die die berüchtigten Pausenzeiten von Java-Anwendungen auf Millisekunden beschränken. Wir stellen die Arbeitsweise der beiden Collectors vor, messen mit Hilfe einer praxisnahen Benchmark, ob die Collectors halten, was sie versprechen, und diskutieren, wie sich Shenandoah und ZGC voneinander abgrenzen.

Zu den dynamischsten Gebieten des OpenJDK zählen derzeit die Garbage Collectors. Gab es 20 Jahre nach Einführung von Java mit SerialGC, ParallelGC, CMS und G1 lediglich vier Collectors, sind seit Java 11 mit ZGC und Shenandoah gleich zwei neue hinzugekommen. Beides sind Low-Pause Collectors, die Anwendungen nur wenige Millisekunden unterbrechen und den Großteil ihrer Aktivitäten nebenläufig zu den Anwendungsthreads ausführen. Das ist ein Novum im OpenJDK: Vergleichbare Produkte wie C4 von Azul waren in der Vergangenheit nur auf kommerzieller Basis verfügbar.

In der Literatur [1], [2] wurden Shenandoah und ZGC in der Vergangenheit separat behandelt, ohne ihre Funktionsweise zueinander in Bezug zu setzen. Wir verfolgen einen anderen Ansatz und arbeiten heraus, dass die beiden Collectors auf demselben Prozessmodell basieren.

Grundlagen

Objekte werden in Java in einem spezifischen Bereich, dem Heap, gespeichert. Ein Objekt heißt lebend, wenn die Anwendung darauf zugreifen kann. Objekte, die für die Applikation nicht erreichbar sind, werden als Garbage bezeichnet. Ein Garbage Collector (GC) hat die Aufgabe, Garbage zu identifizieren und zu recyceln, d. h. den von ihm belegten Speicherplatz wieder verfügbar zu machen. Ein GC ist regionenbasiert, wenn er den Heap in kleinere Bereiche (Regionen) unterteilt, die separat recycelt werden können.

Ein GC heißt parallel, wenn er seine Aufgaben auf mehrere parallel arbeitende Threads verteilt, er heißt concurrent oder nebenläufig, wenn die Threads des GCs und der Anwendung gleichzeitig ausgeführt werden. Hält ein GC die Anwendung an, spricht man von Stop the World (STW), die Anwendungsunterbrechung wird als Pause oder Latenz bezeichnet.

Eigenschaften von ZGC und Shenandoah

ZGC wurde von Oracle zunächst proprietär für das eigene JDK entwickelt, aber Ende 2017 in das OpenJDK überführt und in Java 11 freigegeben. Shenandoah (benannt nach dem gleichnamigen Nationalpark in den USA) wird seit 2013von Red Hat entwickelt und ist seit Java 12 Teil des OpenJDK. In Release 13 wurde Version 2.0 veröffentlicht, die weitreichende konzeptionelle Änderu...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang