ein Objekt wird als garbage bezeichnet, falls es vom
laufenden Programm nicht mehr erreichbar ist, d.h. es gibt keinen Pfad
von Referenzen vom Programm zum Objekt
Vorteile:
vermeidet memory leaks (vorallem langsam wachsende
Speicherlöcher sind schwer zu finden)
verhindert zu zeitige Freigabe von Objekten, d.h. Referenzen
zu nicht mehr existieren Objekten sind nicht möglich
unterstützt sehr gut die Implementierung von dynamischen
Datenstrukturen
führt i.A. zu einfachen, zuverlässigen und kostengünstigen
Code
Nachteile:
erzeugt einen mehr oder weniger großen Laufzeit Overhead
für Realtime Systeme nur bedingt geeignet
Allgemeine Vorgehensweise:
markiere alle "lebenden" Objekte irgendwie, um sie vom Garbage
zu unterscheiden (garbage detection)
gib Speicher der Garbage Objekte frei, so daß das Programm
ihn wieder nutzen kann (garbage reclamation)
(in der Praxis können zeitliche und funktionale
Überschneidungen beider Phasen eintreten)