Freigeben über


Garbage Collection im Hintergrund

Bei der Garbage Collection (GC) im Hintergrund werden kurzlebige Generationen (0 und 1) bei Bedarf bereinigt, während die Garbage Collection von Generation 2 ausgeführt wird. Die Garbage Collection wird für einen oder mehrere dedizierte Threads ausgeführt – je nachdem ob sie auf einer Workstation oder für Server ausgeführt wird – und gilt nur für Generation 2.

Die Garbage Collection im Hintergrund ist standardmäßig aktiviert. Sie kann mit der gcConcurrent-Konfigurationseinstellung in .NET Framework-Apps oder der Einstellung System.GC.Concurrent in .NET Core- und .NET 5- oder höherer-Apps aktiviert oder deaktiviert werden.

Hinweis

Ab .NET Framework 4 ersetzt die Garbage Collection im Hintergrund die gleichzeitige Garbage Collection. In .NET Framework 4 wird sie nur für die Garbage Collection für Arbeitsstationen unterstützt. Ab .NET Framework 4.5 ist die Garbage Collection im Hintergrund für Arbeitsstationen und Server verfügbar.

Eine Garbage Collection für kurzlebige Generationen, die während der Garbage Collection im Hintergrund stattfindet, wird als Garbage Collection im Vordergrund bezeichnet. Wenn Garbage Collections im Vordergrund stattfinden, werden alle verwalteten Threads angehalten.

Wenn eine Garbage Collection im Hintergrund ausgeführt wird und Sie genügend Objekte in Generation 0 zugeordnet haben, führt die CLR eine Garbage Collection der Generation 0 oder der Generation 1 im Vordergrund aus. Der dedizierte Thread der Garbage Collection im Hintergrund prüft häufig, ob eine Anforderung für die Garbage Collection im Vordergrund besteht. Trifft dies zu, wird die Garbage Collection im Hintergrund angehalten, damit die Garbage Collection im Vordergrund stattfinden kann. Nachdem die Garbage Collection im Vordergrund abgeschlossen wurde, werden dedizierte Threads der Garbage Collection im Hintergrund und die Benutzerthreads fortgesetzt.

Die Garbage Collection im Hintergrund beseitigt die von der gleichzeitigen Garbage Collection auferlegten Speicherbelegungseinschränkungen, da kurzlebige Garbage Collections während der Garbage Collection im Hintergrund stattfinden können. Mit der Garbage Collection im Hintergrund können inaktive Objekte in kurzlebigen Generationen entfernt werden. Ferner kann der Heap bei Bedarf während einer Garbage Collection der Generation 1 erweitert werden.

Hintergrundarbeitsstation vs. Server GC

Ab .NET Framework 4.5 ist die Garbage Collection im Hintergrund für Server verfügbar. Die Garbage Collection im Hintergrund ist der Standardmodus für die Garbage Collection auf Servern.

Die Garbage Collection von Hintergrundservern funktioniert ähnlich wie die Garbage Collection der Hintergrundarbeitsstation, aber es gibt einige Unterschiede:

  • Die Garbage Collection der Hintergrundarbeitsstation verwendet einen dedizierten Hintergrundbereinigungsthread, während für die Garbage Collection des Hintergrundservers mehrere Threads verwendet werden. Normalerweise gibt es einen dedizierten Thread für jeden logischen Prozessor.

  • Anders als der Garbage-Collection-Thread im Hintergrund auf einer Arbeitsstation tritt bei diesen Threads auf Servern kein Timeout auf.

Die folgende Abbildung veranschaulicht eine Garbage Collection im Hintergrund für einen separaten dedizierten Thread auf einer Arbeitsstation:

Garbage Collection auf Arbeitsstationen im Hintergrund

Die folgende Abbildung veranschaulicht eine Garbage Collection im Hintergrund für einen separaten dedizierten Thread auf einem Server:

Garbage Collection auf dem Server im Hintergrund

Gleichzeitige Garbage Collection

Tipp

Dieser Abschnitt gilt für:

  • .NET Framework 3.5 und früher für die Garbage Collection für Arbeitsstationen
  • .NET Framework 4 und früher für die Garbage Collection auf dem Server

Die gleichzeitige Garbage Collection wird in späteren Versionen durch die Garbage Collection im Hintergrund ersetzt.

In der Arbeitsstations- oder Server-Speicherbereinigung können Sie die gleichzeitige Speicherbereinigung aktivieren, wodurch Threads parallel zu einem dedizierten Thread ausgeführt werden können, der den Speicherbereinigungsvorgang während des größten Teils der Ausführungszeit durchführt. Diese Option wirkt sich nur auf die Garbage Collection in Generation 2 aus. In Generation 0 und 1 findet keine gleichzeitigen Garbage Collection statt, da diese schnell beendet wird.

Dank der gleichzeitigen Garbage Collection ist die Reaktionsfähigkeit interaktiver Anwendungen besser, da die für die Garbage Collection notwendigen Pausen minimiert werden. Verwaltete Threads können weiterhin die meiste Zeit ausgeführt werden, während der Thread der gleichzeitigen Garbage Collection ausgeführt wird. Dies verkürzt die Pausen während einer Garbage Collection.

Die gleichzeitige Garbage Collection wird auf einem dedizierten Thread ausgeführt. Standardmäßig führt die CLR die Garbage Collection für die Arbeitsstation mit aktivierter gleichzeitiger Garbage Collection auf Computern mit einem oder mehreren Prozessoren aus.

Die folgende Abbildung zeigt eine parallele Garbage Collection für einen separaten dedizierten Thread.

Threads für parallele Garbage Collection

Siehe auch