Definition Was ist eine Garbage Collection (GC)?

Autor / Redakteur: Dipl.-Ing. (FH) Stefan Luber / Dr. Jürgen Ehneß

Der Begriff „Garbage Collection“ bezeichnet im Computer- und Software-Umfeld Methoden zur automatischen Bereinigung des Speichers. Von einem Programm oder einem Betriebssystem nicht mehr benötigte Speicherbereiche werden durch die automatische Speicherbereinigung wieder freigegeben und dadurch Speicherlecks verhindert.

Anbieter zum Thema

Die wichtigsten IT-Fachbegriffe verständlich erklärt.
Die wichtigsten IT-Fachbegriffe verständlich erklärt.
(Bild: © aga7ta - Fotolia)

Garbage collection lässt sich mit dem Begriff „Müllsammlung“ ins Deutsche übersetzen. Es handelt sich um verschiedene Methoden, mit denen sich Speicherbereiche automatisch von nicht mehr benötigtem „Datenmüll“ bereinigen lassen. Die Speicherbereinigung gibt den von Programmen oder Betriebssystemen verwendeten und nicht mehr benötigten Speicherbereich frei und reduziert das Risiko für Speicherlecks.

Eine weitere Aufgabe der Speicherbereinigung ist es, die Fragmentierung des vorhandenen Speichers zu reduzieren. Die automatische Speicherbereinigung verhindert, dass sich Programmierer oder Software-Entwickler selbst um die Speicherverwaltung kümmern müssen. Gänzlich ausschließen lassen sich Speicherlecks mit Garbage Collection nicht. Es kommen verschiedene Methoden und Techniken zur Identifikation und Freigabe nicht mehr benötigter Speicherbereiche zum Einsatz, die unter den verschiedenen möglichen Bedingungen unterschiedlich effizient arbeiten.

Die Speicherbereinigung belegt Rechenressourcen und reduziert die Leistungsfähigkeit des Systems. Sie arbeitet im Hintergrund in regelmäßigen Abständen oder getriggert durch bestimmte Ereignisse. Eine Vielzahl von Programmiersprachen und Laufzeitumgebungen verfügt über integrierte Garbage Collectoren oder fertige Bibliotheken zur Speicherbereinigung. Beispiele für Programmiersprachen und Laufzeitumgebungen mit integrierter GC sind Lisp, Java, Basic, .Net, Python, Perl, Visual Objects oder C#.

Gründe für die Notwendigkeit einer automatischen Speicherbereinigung

Im Software-Umfeld ist es üblich, Speicherplatz zu reservieren, um beispielsweise die Inhalte von Variablen oder Datenobjekten während der Programmausführung zu speichern. Ist die Routine beendet, die den Speicherplatz für die Variablen oder Datenobjekte in Anspruch genommen hat, sollte der Speicherplatz wieder freigegeben werden. Passiert dies nicht, lässt er sich nicht mehr verwenden und ist für andere Programmteile oder Anwendungen nicht mehr nutzbar. Als Folge entstehen Speicherlecks und stark fragmentierte Speicherbereiche.

Im Extremfall hat das System überhaupt keinen Speicherplatz mehr zur Verfügung. Diese Fehler treten nicht unmittelbar, sondern in der Regel erst nach einer gewissen Programm- oder Systemlaufzeit auf und sind oft schwer zurückzuverfolgen. Da die Programmroutinen komplex sind und Datenobjekte aufeinander referenzieren, ist es extrem aufwendig, die Speicherbereinigung manuell oder durch selbst programmierte Verfahren vorzunehmen. Eine Garbage Collection nimmt dem Programmierer diese Aufgabe ab.

Verschiedene GC-Methoden

Es existieren zahlreiche verschiedene Methoden, wie eine automatische Speicherbereinigung durchgeführt werden kann. Abhängig vom jeweiligen Anwendungsfall und der Programmumgebung eignen sich die Methoden unterschiedlich gut. Zwei häufig verwendete Methoden sind das Reference-Counting und das Mark-and-Sweep. Reference-Counting identifiziert die nicht mehr benötigten Objekte durch fehlende Referenzen und löscht sie. Allerdings kann es passieren, dass sich zwei nicht mehr benötigte Objekte gegenseitig referenzieren und das Reference-Counting sie nicht löscht. Mark-and-Sweep kennt dieses Problem nicht. Die Methode erkennt aktive Objekte, indem sie von einem Root-Objekt ausgehend die referenzierten und erreichbaren Objekte markiert. Alle nicht erreichbaren Objekte sind nicht markiert und können per Sweeping gelöscht werden.

(ID:45906615)