© Excellent backgrounds/Shutterstock.com
Neuer Garbage Collector in Java 9: Was ändert sich, was bleibt?

Das Einmaleins der Müllsammlung


Oracle hat mit der Entscheidung, das JDK Enhancement Proposal (JEP) 248 in seine ­Liste der für Java 9 vorgesehenen Features aufzunehmen und damit den Garbage-First (G1) Collector zum Standard Garbage Collector für Serverkonfigurationen zu machen, für einige Diskussionen in der Java-Community gesorgt. Doch wo liegen die Unterschiede zwischen G1 und dem aktuellen Parallel GC? Welchen Handlungsbedarf gibt es für alle zukünftigen Nutzer von Java 9?

Garbage Collection hat einige Nachteile, die sich je nach Anwendungsszenario negativ auf eine Applikation auswirken können. Das liegt darin begründet, dass das Müllsammeln selbst Ressourcen kostet und damit auch die laufende Anwendung beeinflusst. Das kann man im Vergleich mit der realen Welt sehr einfach verstehen: Je mehr Müll sich angestaut hat und je größer die Stadt ist, desto länger braucht die Müllabfuhr, um ihn wegzuräumen und zu verwerten.

In der Java-Welt ist das genauso. Je größer die Heap Size moderner Applikationen wird, desto mehr Zeit wird damit verschwendet, unreferenzierte Java-Objekte zu finden und aufzuräumen. Wenn dabei plötzlich die gesamte Anwendung für teilweise mehrere Minuten anhält, dann ist das ein K.o.-Kriterium. Im Laufe der Zeit wurden daher die Algorithmen, die das Einsammeln, Aufräumen und Wegwerfen der Objekte implementieren, daraufhin optimiert, nicht so stark auf den Programmablauf einzuwirken.

Der Entwickler hat dabei die Auswahl zwischen mehreren Algorithmen. Wenn man jedoch keinen angibt, wird der standardmäßige benutzt. Dieser arbeitet zwar parallel zum eigentlichen Programmablauf, es gibt aber trotzdem ab und zu Phasen, in denen dieser für das endgültige Aufräumen (Entfernen der toten Objekte und Defragmentierung) alle laufenden Java-Threads anhalten muss. Dies wird als Stop-The-World (STW) bezeichnet. Je nach Größe und Anzahl der Objekte auf dem Heap kann dies manchmal sehr lange dauern. Und das passiert natürlich genau dann, wenn man es am wenigsten gebrauchen kann.

Garbage First?

Der für Java 9 vorgeschlagene neue Garbage Collector G1 (Garbage First, G1GC) wird bereits seit Java 7u4 im JDK mitgeliefert, wird aber nicht automatisch ausgewählt. G1 spaltet das Aufräumen der „Old Generation“ (langlebige Objekte) in mehrere Phasen auf, die jedoch nicht alle Stop-The-World sein müssen. Dadurch werden die Pausen kürzer und das Programm kann dazwischen wieder weiterlaufen.

Leider hat dies zur Folge, dass der Verwaltungsaufwand größer wird, und da ja das ganze Programm nicht steh...

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