Einführung


Alle Seminare - Inhaltsübersicht - Nächstes: Abgrenzung zur Referenzzählung

Übersicht: Einführung


Was ist Garbage Collection?

Garbage Collection heißt so viel wie Müllabfuhr. Der Müll ist hierbei die nicht mehr verwendeten Speicherbereiche. Die Abfuhr heißt, eben diese wieder für neue Speicheranforderungen zur Verfügung zu stellen, ein passenderer Name wäre also Müllrecycling.

In einer Programmiersprache/einem Laufzeitsystem, das Garbage Collected ist, braucht der Programmierer sich nicht um die Speicherverwaltung kümmern, der Garbage Collector räumt (fast) alle nicht mehr verwendeten Speicherbereiche automatisch auf und stellt sie für spätere Anforderungen wieder zur Verfügung. Die grundlegende Form des Garbage Collectors wurde bereits in den 1950ern entwickelt, ist also etwa genau so alt wie Hochsprachen an sich.

Garbage Collection wird in viele Programmiersprachen verwendet, beispielsweise Java, Lisp, Smalltalk, Eiffel, Haskell, ML, Scheme, Modula-3, Ruby, also auch die meisten in diesem Seminar vorgestellten Sprachen.

Warum Garbage Collection?

Das automatische Freigeben von nicht mehr verwendeten Speicherblöcken, und auch wirklich nur dieser, erleichtert dem Programmierer seine Arbeit meist sehr und nimmt ihm so einige Fehlerquellen, die wichtigsten sind dabei Speicherlecks und Zugriffe auf bereits freigegebene Speicherbereiche (über "dangling pointers"). Er braucht sich damit um die gesamte Speicherverwaltung keine Geanken zu machen oder extra Befehle dafür zu verwenden.

Als Gegenargument dürfte den meisten einfallen, daß Garbage Collection deutlich langsamer ist/sein muß als eine herkömmliche Speicherverwaltung mit dem Freigeben per Hand. Dies ist ein Irrglauben, der früher mal einen wahren Kern hatte, aber bei modernen Garbage Collectoren nur noch selten zutrifft, oder nur in vernachlässigbaren Ausmaßen. Während der eigentliche Durchlauf des Garbage Collectors durchaus einiges an Zeit kosten kann und bei früheren langsameren Systemen so zu spürbaren Pausen führen konnte, gleicht sich dies inzwischen durch verkürzte Speicheranforderungs- und -freigabezeiten wieder aus, die ein herkömmlicher Speichermanager damit verbringt die Freispeicherlisten zu durchsuchen und zu aktualisieren. Die Pausen an sich können durch inkrementelle Läufe und durch verschiedene Objektgenerationen vermieden werden.

Ähnliche wie es auch verschiedene Algorithmen für konventionelle Speichermanager gibt, die je nach Programmierstil des Anwenderprogramms eine verschieden hohe Effizenz liefern, gibt es auch verschiedene Garbage Collector Algorithmen. Moderne Garbage Collectors nutzen oft mehrere Kombinationen der verschiedenen Algorithmen um eine hohe Effizienz zu erzielen. Viele Laufzeitumgebungen bieten dem Anwender auch an, zwischen den verschiedenen Garbage Collectoren zu wählen und Parameter der Algorithmen einzustellen, um für das entsprechende Programm im Zweifelsfall die Effektivität zu erhöhen.

Es wird in dieser Ausarbeitung meist der Ausdruck Objekt und Referenz verwendet, Garbage Collectoren sind jedoch prinzipiell auch auf nicht rein objekt-orientierte Sprachen anwendbar. Entsprechend können also auch Speicherbereich und Zeiger verwendet werden.


Alle Seminare - Inhaltsübersicht - Nächstes: Abgrenzung zur Referenzzählung Seitenanfang