Für die Virtuelle Maschine von Sun wurde ein neuartiger Garbage-Collection-Algorithmus,
"G1" genannt, entwickelt, der in Java 7 der Standard-Algorithmus sein wird
und für Early Adopters bereits in Java 6 Update 14 vorab verfügbar
ist. Das Ziel dieses neuen Garbage Collectors ist es, die Stop-World-Phasen
verlässlicher zu steuerm, ohne dabei den Durchsatz der Applikation
wesentlich zu beeinträchtigen.
Bislang wurden in der Sun-JVM (und auch den meisten anderen virtuellen
Maschinen) generationenabhängige Garbage-Collection-Algorithmen verwendet.
Sie teilen den Heap in unterschiedlich Bereiche (sogenannte "Generationen")
für junge und alte Objekte ein. Auf den verschiendenen Generationen
werden unterschiedliche Algorithmen verwendet: Mark-And-Copy auf der Young
Generation und Mark-And-Sweep auf der Old Generation. Diese traditionell
verwendeten Algorithmen haben den Nachteil, dass sie zwangsläufig
zu sogenannten "Stop-the-World"-Phasen führen, bei denen die Applikations-Threads
angehalten werden, damit die Garbage-Collection-Threads exklusiven Zugriff
auf den Heap haben.
Diese Pausen sind in vielen Anwendungen problematisch. Dazu gehören
Anwendungen, in denen es Vorgaben für die Reaktions- und Verarbeitungszeiten
gibt, z.B. Kommunikationsanwendungen, die innerhalb einer vorgegebenen
Zeitspanne auf einen Request einen Response schicken müssen. Wenn
die GC-Pause zu lang ist, schafft die Anwendung es nicht, rechtzeitig zu
reagieren. Das gleiche gilt aber auch für Anwendungen mit GUI; man
kann den Benutzer nicht beliebig lange auf eine Reaktion warten lassen,
nur weil der Garbage Collector gerade alle Threads der Anwendung blockiert.
Unterm Strich sind es relativ viele Anwendungen, die mit den GC-Pausen
Probleme bekommen können. Deshalb ist es wichtig, die Länge und
Häufigkeit der GC-Pausen verlässlich zu begrenzen. Das geht mit
den herkömmlichen GC-Algorithmen kaum und wenn, dann nur unter Inkaufnahme
spürbarer Durchsatzverluste.
Der neue GC-Algorithmus "G1" (für "Garbage First") von Sun versucht,
die GC-Pausen verlässlicher zu gestalten, ohne den Durchsatz nennenswert
zu beinträchtigen. Wie es funktioniert, wird in der Session erläutert.
Es werden die Prinzipien des G1-Algorithmus erläutert und Unterschiede
zu den herkömmlichen Algorithmen aufgezeigt, damit Java-Entwickler
beurteilen können, ob G1-Garbage-Collection eine brauchbare Alternative
für ihr Projekt ist. |