Share via


Achtergrond garbagecollection

In de achtergrond worden garbagecollection (GC) kortstondige generaties (0 en 1) verzameld zo nodig terwijl de verzameling van generatie 2 wordt uitgevoerd. Garbagecollection op de achtergrond wordt uitgevoerd op een of meer toegewezen threads, afhankelijk van of het werkstation of server-GC is en alleen van toepassing is op verzamelingen van de tweede generatie.

Garbagecollection op de achtergrond is standaard ingeschakeld. Deze kan worden ingeschakeld of uitgeschakeld met de configuratie-instelling gcConcurrent in .NET Framework-apps of de instelling System.GC.Concurrent in .NET Core en .NET 5 en hoger.

Notitie

Garbagecollection op de achtergrond vervangt gelijktijdige garbagecollection en is beschikbaar in .NET Framework 4 en latere versies. In .NET Framework 4 wordt deze alleen ondersteund voor garbagecollection van werkstations . Vanaf .NET Framework 4.5 is de garbagecollection op de achtergrond beschikbaar voor zowel werkstation als server garbagecollection.

Een verzameling op kortstondige generaties tijdens de achtergrond garbagecollection wordt ook wel voorgrond garbagecollection genoemd. Wanneer er voorgrond garbageverzamelingen optreden, worden alle beheerde threads onderbroken.

Wanneer de achtergrond garbagecollection wordt uitgevoerd en u voldoende objecten in generatie 0 hebt toegewezen, voert de CLR een 0e generatie of 1 voorgrond garbagecollection uit. De toegewezen achtergrond-garbagecollectionthread controleert regelmatig op veilige punten om te bepalen of er een aanvraag is voor de voorgrond garbagecollection. Als dat het geval is, wordt de achtergrondverzameling zichzelf onderbroken, zodat de voorgrond garbagecollection kan optreden. Nadat de voorgrond garbagecollection is voltooid, worden de toegewezen threads voor garbagecollection op de achtergrond en gebruikersthreads hervat.

Achtergrond garbagecollection verwijdert toewijzingsbeperkingen die door gelijktijdige garbagecollection worden opgelegd, omdat tijdelijke garbagecollection kan optreden tijdens de achtergrond garbagecollection. De achtergrond garbagecollection kan dode objecten in tijdelijke generaties verwijderen. Het kan ook de heap uitbreiden indien nodig tijdens een garbagecollection van de eerste generatie.

Achtergrondwerkstation versus server GC

Vanaf .NET Framework 4.5 is garbagecollection op de achtergrond beschikbaar voor server GC. Achtergrond-GC is de standaardmodus voor de garbagecollection van de server.

De garbagecollection van de achtergrondserver werkt op dezelfde manier als de garbagecollection op het achtergrondwerkstation, maar er zijn enkele verschillen:

  • Achtergrondwerkstation garbagecollection maakt gebruik van één toegewezen achtergrond garbagecollection thread, terwijl de garbagecollection op de achtergrondserver meerdere threads gebruikt. Normaal gesproken is er een toegewezen thread voor elke logische processor.

  • In tegenstelling tot de achtergrondthread van de garbagecollection van het werkstation, GC-threads op de achtergrond van de achtergrond, GC-threads op de achtergrond, treedt er geen time-out op voor de GC-threads van de achtergrondserver.

In de volgende afbeelding ziet u de achtergrondwerkstation garbagecollection die wordt uitgevoerd op een afzonderlijke, toegewezen thread:

Background workstation garbage collection

In de volgende afbeelding ziet u de garbagecollection van de achtergrondserver die wordt uitgevoerd op afzonderlijke, toegewezen threads:

Background server garbage collection

Gelijktijdige garbagecollection

Tip

Deze sectie is van toepassing op:

  • .NET Framework 3.5 en eerder voor garbagecollection van werkstations
  • .NET Framework 4 en eerder voor garbagecollection van de server

Gelijktijdige garbagecollection wordt vervangen door de garbagecollection op de achtergrond in latere versies.

In werkstation of server garbagecollection kunt u gelijktijdige garbagecollection inschakelen, waardoor threads gelijktijdig kunnen worden uitgevoerd met een toegewezen thread die de garbagecollection voor het grootste deel van de duur van de verzameling uitvoert. Deze optie is alleen van invloed op garbagecollection in generatie 2; generaties 0 en 1 zijn altijd niet gelijktijdig omdat ze snel eindigen.

Met gelijktijdige garbagecollection kunnen interactieve toepassingen sneller reageren door onderbrekingen voor een verzameling te minimaliseren. Beheerde threads kunnen de meeste tijd blijven worden uitgevoerd terwijl de gelijktijdige garbagecollection-thread wordt uitgevoerd. Dit ontwerp resulteert in kortere pauzes terwijl er een garbagecollection plaatsvindt.

Gelijktijdige garbagecollection wordt uitgevoerd op een toegewezen thread. De CLR voert standaard garbagecollection voor werkstations uit met gelijktijdige garbagecollection ingeschakeld op computers met één processor en meerdere processoren.

In de volgende afbeelding ziet u de gelijktijdige garbagecollection die wordt uitgevoerd op een afzonderlijke toegewezen thread.

Concurrent Garbage Collection Threads

Zie ook