Garbage Collection sorgt bei Java 5.0 für frischen Wind

Das Befehlszeilenargument -verbose:gc gibt bei jeder Collection Informationen aus. Wenn es aktiv ist, sieht man für jede Garbage Collection ein ähnliches Ergebnis. Zum Beispiel:


Es gibt hier zwei kleinere Collections und eine große (Full GC). Die Option -XX:+PrintGCDetails druckt zusätzliche Informationen über die Collections. Die Option -XX:+PrintGCTimeStamps druckt außerdem eine Zeitmarke am Beginn jeder Collection. Listing A zeigt, was zu sehen ist, wenn beide Optionen gesetzt sind.

Listing A


Zusätzlich werden Informationen über eine größere Collection angezeigt, die durch Tenured begrenzt wurde. Die Nutzung der Tenured Generation wurde hier auf etwa 10 Prozent reduziert und benötigte etwa 0,13 Sekunden.

Eine Reihe von Parametern beeinflusst die Größe der Generationen. Bei der Initialisierung der Virtual Machine ist der ganze Speicherplatz für den Heap reserviert. Mit der Option -Xmx kann man die Größe des reservierten Platzes bestimmen. Wenn der Wert des Xms-Parameters kleiner als der Wert des Xmx-Parameters ist, wird nicht der gesamte reservierte Speicherplatz sofort der Virtual Machine zur Verfügung gestellt. Die verschiedenen Teile des Heaps (Permanent Generation, Tenured Generation und Young Generation) können nach Bedarf bis an die Grenze des virtuellen Speicherplatzes wachsen.

Gemäß der Voreinstellung vergrößert oder verkleinert die Virtual Machine den Heap bei jeder Collection, um das Verhältnis zwischen freiem Platz und aktiven Objekten innerhalb eines bestimmten Bereichs zu halten. Dieser Zielbereich wird in Prozentpunkten über die Parameter -XX:MinHeapFreeRatio=<minimum> und -XX:MaxHeapFreeRatio=<maximum> bestimmt, wobei die Gesamtgröße nach unten durch -Xms und nach oben durch -Xmx begrenzt ist. Wenn es keine Probleme mit den Pausen gibt, sollte man der Virtual Machine so viel Speicher wie möglich zuweisen. Der voreingestellte Wert (64 MByte) ist häufig zu klein. Beschreibungen weiterer VM_Optionen finden sich auf der Website von Sun.

Man kann auch den Anteil des Heaps bestimmen, der für die Young Generation verwendet wird. Je größer die Young Generation ist, desto weniger häufig finden kleinere Collections statt. Allerdings bedingt bei einer begrenzten Heap-Größe eine größere Young Generation eine kleinere Tenured Generation, wodurch sich die Häufigkeit der größeren Collections erhöht. Das Optimale Größenverhältnis hängt von der Verteilung der von der Anwendung zugewiesenen Objekte über die Gesamtbetriebsdauer hinweg ab. Die Größe der Young Generation wird über NewRatio bestimmt. So bedeutet zum Beispiel die Einstellung -XX:NewRatio=3, dass das Verhältnis zwischen Young und Tenured Generation 1:3 beträgt. Wenn man möchte, kann man den Parameter SurvivorRatio verwenden, um die Größe der Survivor Spaces einzustellen, dies wirkt sich aber häufig nicht auf die Leistung aus. Die Einstellung -XX:SurvivorRatio=6 setzt das Verhältnis zwischen den Survivor Spaces und Eden auf jeweils 1:6. Wenn sich keine größeren Probleme mit ausufernden Zeiten für die größeren Collections und Pausen ergeben, sollte man der Young Generation viel Speicher zuweisen.

Java 5.0 verfügt über drei verschiedene Garbage Collectors. Der Throughput Collector verwendet eine Parallelversion des Young Generation Collectors. Er kommt zum Einsatz, wenn die Option -XX:+UseParallelGC in der Befehlszeile eingegeben wird. Der Concurrent Low Pause Collector wird eingesetzt, wenn die Option -Xincgc oder die Option -XX:+UseConcMarkSweepGC in der Befehlszeile steht. In diesem Fall wird die Anwendung während der Collection kurz unterbrochen. Der Incremental Low Pause Collector wird nur eingesetzt, wenn -XX:+UseTrainGC in die Befehlszeile eingegeben wird. Er wird von den kommenden Versionen nicht mehr unterstützt. Wer mehr Informationen darüber sucht, sollte die von Sun bereitgehaltene Dokumentation über diesen Collector lesen. (Hinweis: -XX:+UseParallelGC nicht zusammen mit -XX:+UseConcMarkSweepGC verwenden.)

Fazit

Garbage Collection kann bei verschiedenen Anwendungen zu einem Engpass werden, je nach den Anforderungen dieser Anwendungen. Durch das Verständnis der Anforderungen einer Anwendungen und der Optionen bei der Garbage Collection kann man die Beeinträchtigungen durch die Garbage Collection minimieren.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Garbage Collection sorgt bei Java 5.0 für frischen Wind

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *