Garbage Collector (GC)

Eintrag zuletzt aktualisiert am: 27.03.2018

Die Laufzeitumgebung Common Language Runtime (CLR) von .NET, .NET Core und Xamarin enthält einen Garbage Collector (GC), der im Hintergrund (in einem System-Thread) arbeitet und den Speicher aufräumt. Der Speicher wird allerdings nicht sofort nach dem Ende der Verwendung eines Objekts freigegeben, sondern zu einem nicht festgelegten Zeitpunkt bei Bedarf (Lazy Resource Recovery). Beim Aufräumen des Speichers erzeugt der Garbage Collector einen Baum aller Objekte, auf die es aktuell einen Objektverweis gibt. Der Speicher aller nicht mehr erreichbaren Objekte wird freigegeben.
Der Garbage Collector kann von einer Anwendung nur bedingt beeinflusst werden. Die Anwendung kann mit dem Befehl System.GC.Collect() dem Garbage Collector den Auftrag geben, tätig zu werden. Eine Anwendung eine Speicherbereinigung temporär mit GC.TryStartNoGCRegion() unterdrücken.
Der Garbage Collector ruft die Destruktoren (alias Finalizer) der .NET-Objekte auf. Die Reihenfolge des Aufrufs und ob der Finalizer überhaupt aufgerufen wird, ist jedoch nicht deterministisch, d. h., es kann sein, dass ein Finalizer nicht aufgerufen wird. Beim Schließen einer .NET-Anwendung werden die Finalizer der verbliebenen Objekte nicht aufgerufen