Garbage Collection in background

In un'operazione di Garbage Collection (GC) in background, le generazioni temporanee (0 e 1) vengono raccolte in base alle esigenze mentre è in corso la raccolta di generazione 2. La Garbage Collection in background viene eseguita su uno o più thread dedicati, a seconda che si tratti di workstation o server GC e si applica solo alle raccolte di seconda generazione.

L'operazione di Garbage Collection in background è abilitata per impostazione predefinita. Può essere abilitata o disabilitata con l'impostazione di configurazione gcConcurrent nelle app .NET Framework o nell'impostazione system.GC.Concurrent in .NET Core e .NET 5 e versioni successive.

Nota

Garbage Collection in background sostituisce la Garbage Collection simultanea ed è disponibile in .NET Framework 4 e versioni successive. In .NET Framework 4, è supportato solo per workstation Garbage Collection. A partire da .NET Framework 4.5, la Garbage Collection in background è disponibile per Garbage Collection sia workstation che server.

Una raccolta nelle generazioni temporanee durante un'operazione in background è definita Garbage Collection in primo piano. Durante l'esecuzione di un'operazione di Garbage Collection in primo piano, tutti i thread gestiti vengono sospesi.

Quando è in corso un'operazione in background ed è stato allocato un numero sufficiente di oggetti nella generazione 0, CLR esegue un'operazione di Garbage Collection in primo piano della generazione 0 o 1. Il thread di Garbage Collection in background dedicato esegue controlli in corrispondenza di punti sicuri frequenti per stabilire se vi sia una richiesta di Garbage Collection in primo piano. In caso affermativo, la raccolta in background si autosospende in modo che possa essere eseguita l'operazione in primo piano. Una volta completata tale operazione, si ha la ripresa dei thread di Garbage Collection in background dedicato e dei thread dell'utente.

La modalità in background elimina le restrizioni di allocazione imposte dalla modalità simultanea, dal momento che durante un'operazione di Garbage Collection in background è possibile eseguire operazioni temporanee. La Garbage Collection in background può rimuovere oggetti non attivi nelle generazioni temporanee. Può anche espandere l'heap, se necessario, durante un'operazione di Garbage Collection di generazione 1.

Workstation in background e server GC

A partire da .NET Framework 4.5, la Garbage Collection in background è disponibile per la GC del server. La GC in background è la modalità predefinita per la Garbage Collection del server.

Le funzioni di Garbage Collection del server in background sono simili a quelle della garbage collection della workstation in background, ma esistono alcune differenze:

  • Garbage Collection della workstation in background usa un thread di Garbage Collection in background dedicato, mentre la Garbage Collection del server in background usa più thread. In genere, è presente un thread dedicato per ogni processore logico.

  • A differenza del thread di Garbage Collection in background della workstation, i thread di GC del server in background non raggiungono il timeout.

La figura seguente mostra l'esecuzione in background di un'operazione di Garbage Collection della workstation in un thread dedicato separato:

Background workstation garbage collection

La figura seguente illustra l'esecuzione in background di un'operazione di Garbage Collection del server in un thread dedicato separato:

Background server garbage collection

Garbage Collection contemporanea

Suggerimento

Questa sezione si applica a:

  • .NET Framework 3.5 e versioni precedenti per garbage collection delle workstation
  • .NET Framework 4 e versioni precedenti per Garbage Collection del server

Il garbage simultaneo viene sostituito da Garbage Collection in background nelle versioni successive.

In garbage collection della workstation o del server è possibile abilitare la garbage collection simultanea, che consente l'esecuzione simultanea dei thread con un thread dedicato che esegue la Garbage Collection per la maggior parte della durata della raccolta. Questa opzione riguarda solo le operazioni di Garbage Collection nella generazione 2; le generazioni 0 e 1 sono sempre non simultanee in quanto terminano velocemente.

La modalità simultanea consente alle applicazioni interattive una maggiore efficienza di risposta riducendo al minimo le pause di una raccolta. È possibile continuare a eseguire i thread gestiti per la maggior parte del tempo in cui viene eseguito il thread di Garbage Collection in modalità simultanea. Questa progettazione comporta pause più brevi durante l'esecuzione di un'operazione di Garbage Collection.

La modalità simultanea di Garbage Collection viene eseguita in un thread dedicato. Per impostazione predefinita, CLR esegue la Garbage Collection della workstation con Garbage Collection simultaneo abilitato sia nei computer a processore singolo che in più processori.

Nell'illustrazione riportata di seguito viene mostrata l'esecuzione simultanea di un'operazione di Garbage Collection in un thread dedicato separato.

Concurrent Garbage Collection Threads

Vedi anche