Ein Garbage Collector startet an einigen "Root" -Sätzen, die immer als "erreichbar" gelten, z. B. den CPU-Registern, dem Stapel und den globalen Variablen. Es funktioniert, indem Zeiger in diesen Bereichen gefunden werden und rekursiv alles gefunden wird, auf das sie zeigen. Sobald alles gefunden ist, ist alles andere Müll.
Natürlich gibt es einige Variationen, hauptsächlich aus Gründen der Geschwindigkeit. Beispielsweise sind die meisten modernen Garbage Collectors "Generationen", was bedeutet, dass sie Objekte in Generationen unterteilen. Wenn ein Objekt älter wird, dauert der Garbage Collector zwischen den Versuchen, herauszufinden, ob dieses Objekt noch gültig ist oder nicht, immer länger - Es beginnt nur anzunehmen, dass die Chancen, wenn es lange gelebt hat, ziemlich gut sind, dass es noch länger leben wird.
Trotzdem bleibt die Grundidee dieselbe: Alles basiert darauf, von einigen Grundsätzen auszugehen, die für selbstverständlich gehalten werden, und dann alle Zeiger zu verfolgen, um herauszufinden, was sonst noch verwendet werden könnte.
Interessant beiseite: Mögen Menschen oft überrascht sein, wie ähnlich dieser Teil eines Garbage Collectors und der Code für das Marshalling von Objekten für Dinge wie Remoteprozeduraufrufe sind. In jedem Fall gehen Sie von einem Stammsatz von Objekten aus und suchen nach Zeigern, um alle anderen Objekte zu finden, auf die ...