Garbage Collection

Aktualisiert: November 2007

Der Garbage Collector von .NET Framework verwaltet die Reservierung und Freigabe von Arbeitsspeicher für die Anwendung. Wenn Sie den Operator newzum Erstellen eines Objekts verwenden, reserviert die Laufzeit Arbeitsspeicher für das Objekt aus dem verwalteten Heap. Solange ein Adressbereich im verwalteten Heap verfügbar ist, reserviert die Laufzeit Arbeitsspeicher für neue Objekte. Arbeitsspeicher ist jedoch nicht unendlich verfügbar. Möglicherweise muss mithilfe der Garbage Collection Arbeitsspeicher freigegeben werden. Das Optimierungsmodul der Garbage Collection bestimmt den besten Zeitpunkt für das Einsammeln anhand der erfolgten Reservierungen. Beim Einsammeln durch die Garbage Collection wird nach Objekten im verwalteten Heap gesucht, die nicht mehr von der Anwendung verwendet werden. Anschließend werden die für das Freigeben des Arbeitsspeichers erforderlichen Operationen ausgeführt.

In diesem Abschnitt wird beschrieben, wie die Garbage Collection die Reservierung automatisch verwaltet und Arbeitsspeicher für die verwalteten Objekte in der Anwendung freigibt. Außerdem wird das empfohlene Entwurfsmuster beschrieben, mit dem nicht verwaltete, von der Anwendung erstellte Ressourcen ordnungsgemäß bereinigt werden können.

Hinweis:

Die Common Language Runtime (CLR) verfügt in .NET Framework, Version 1.0, über einen eigenen Speicher-Manager für den Objektheap. Dieser Speicher-Manager gibt den nicht verwendeten Arbeitsspeicher unter bestimmten Umständen nicht an das Betriebssystem zurück und macht ihn in einigen Fällen nicht für die Garbage Collection verfügbar. Dadurch schlägt aufgrund der Fragmentierung des virtuellen Adressbereichs die Speicherreservierung fehl. In den .NET Framework-Versionen 1.1 und 2.0 besteht der Objektheap aus ordnungsgemäß ausgerichteten zusammenhängenden Arbeitsspeicherblöcken, die als Heapsegmente bezeichnet werden, sodass die Fragmentierung des virtuellen Speichers minimiert wird. Bei der Garbage Collection wird der von großen Objekten freigegebene Arbeitsspeicher konsolidiert und in eine freie Liste aufgenommen. Heapsegmente, die nur freie Listenelemente enthalten, werden freigegeben, und der Arbeitsspeicher wird an das Betriebssystem zurückgegeben. Mit diesen Änderungen am großen Objektheap konnten die durch diese Form der Fragmentierung des virtuellen Adressbereichs entstandenen Fehler behoben werden.

Wichtiger Hinweis:

Auf Servern mit einer Speicherkapazität von mehr als 2 GB kann es notwendig sein, in der Datei boot.ini den Schalter /3GB anzugeben. Damit umgehen Sie das Problem, dass der gesamte Arbeitsspeicher scheinbar belegt ist, obwohl dem System noch Arbeitsspeicher zur Verfügung steht.

In diesem Abschnitt

  • Hintergrundinformationen zur Speicherverwaltung
    Beschreibt die Anpassungen, die Entwickler, die bisher Visual Basic, C++ oder COM verwendet haben, für die Arbeit mit verwaltetem Code vornehmen sollten.

  • Finalize-Methoden und Destruktoren
    Beschreibt, wie Finalize-Methoden und Destruktoren einem Objekt das Ausführen der erforderlichen Bereinigungsoperationen ermöglichen, bevor der Garbage Collector den Arbeitsspeicher des Objekts automatisch freigibt.

  • Schwache Verweise
    Beschreibt Funktionen, die dem Garbage Collector ermöglichen, ein Objekt zu sammeln, während die Anwendung nach wie vor auf das Objekt zugreifen kann.

  • Indizierte Auflistungen
    Beschreibt, wie Objekte sofort oder zum nächsten optimalen Zeitpunkt freigegeben werden können.

  • Latenzmodi
    Beschreibt die Modi, die das Ausmaß der Garbage Collection bestimmen.

  • Optimierung für freigegebenes Webhosting
    Beschreibt, wie Garbage Collection auf Servern optimiert werden kann, auf denen mehrere kleine Websites gemeinsam gehostet werden.

  • Garbage Collection-Benachrichtigungen
    Beschreibt, wie festgestellt werden kann, wann eine vollständige Garbage Collection ansteht und wann sie abgeschlossen ist.

  • Bereinigen von nicht verwalteten Ressourcen
    Beschreibt das empfohlene Entwurfsmuster für das Bereinigen nicht verwalteter Ressourcen.

Referenz

  • System.GC
    Stellt Methoden für die Interaktion mit dem Garbage Collector des Systems bereit.

  • Object.Finalize
    Ermöglicht es einem Objekt, ggf. Ressourcen freizugeben und andere Bereinigungsoperationen auszuführen, bevor der Garbage Collector das Objekt freigibt.

  • System.IDisposable
    Stellt Funktionen für eine Ressourcenklasse bereit.

Verwandte Abschnitte