Praktische Garbage Collectoren


Alle Seminare - Inhaltsübersicht - Vorher: Multithreading - Nächstes: Aussicht und Tips

Übersicht: Praktische Garbage Collectoren


Existierende Garbage Collectoren

Suns Java Virtual Machine (JVM) (Version 1.4.1) benutzt verschiedene Algorithmen und Kombinationen von Garbage Collectoren. Welche genutzt werden und mit welchen Parametern ist einstellbar. Es wird immer eine Aufteilung der Objekte in junge und alte Generationen vorgenommen, falls die Garbage Collection inkrementell durchgeführt werden soll, geschieht eine weitere Aufteilung (in trains und cars). Für jeden Bereich können dann verschiedene Algorithmen eingesetzt werden, je nachdem, ob die JVM nur auf einen oder mehreren Prozessoren läuft.

Um Referenzen in alten Objekte auf neue Objekte zu erkennen, wenn sie zugewiesen werden benutzt die JVM einen Algorithmus, der für jede Referenzzuweisung einen extra Aufwand bedeutet. Alle Objekte liegen in Karten (cards) innerhalb des Speichers, wird nun eine Referenz in einem Objekt geändert, wird ein Bit zu der zugehörigen Karte gesetzt. Beim Gabage Collector Durchlauf werden als erstes alle so markierten Karten älterer Generationen geprüft und alle Referenzen auf die jüngeren Objekte als Wurzelreferenzen verwendet, so daß sie nicht gelöscht werden. Alternativ könnte man auch die meist vorhandene Verwaltung des virtuellen Speichers nutzen, um die Referenzveränderungen effizienter überwachen zu können.

IBMs Java Virtual Machine (Version 1.3.1) benutzt einen Mark and Sweep Garbage Collector. Nach dem Durchlauf kann ein Kompaktierung erfolgen. Dies kann per Einstellung gefordert oder unterbunden werden, der Garbage Collector entscheidet ansonsten von alleine, ob sie durchgeführt wird. Um die Anzahl der nötigen Durchläufe zu verringern, wird außerdem ein Speicherbereich ständig frei gehalten (wilderness preservation), so daß Speicheranfragen meistens direkt befriedigt werden können wenn sich ein Garbage Collector Durchlauf nicht lohnen würde.

Funktionale Sprachen

Funktionale Sprachen bieten einige spezielle Vorteile bei Benutzung eines Garbage Collectors. In Funktionalen Sprachen sind alle Objekte unveränderlich (immutable), dies bedeutet, daß Referenzen innerhalb von Objekten niemals umgebogen werden können um ein anderes Objekte zu referenzieren. Dadurch hat ein Garbage Collector eine deutlichere Trennung zwischen alten und jungen Objekten und braucht keine Veränderungen der Referenzen zu überwachen.

Bewertungskriterien

Entsprechend den vielen verfügbaren Algorithmen für Garbage Collectoren, muß eine möglichst effiziente Kombination für ein gegebenes Programm oder Umgebung ausgesucht werden. Wie so oft ist nicht jeder Algorithmus ist für jeden Anwendungsfall optimal. Bei der Bewertung kann man folgende Kriterien zu Rate ziehen:


Alle Seminare - Inhaltsübersicht - Vorher: Multithreading - Nächstes: Aussicht und Tips Seitenanfang