Partilhar via


Recolha de lixo de fundo

Na coleta de lixo de fundo (GC), as gerações efêmeras (0 e 1) são coletadas conforme necessário enquanto a coleta da geração 2 está em andamento. A coleta de lixo em segundo plano é executada em um ou mais threads dedicados, dependendo se é estação de trabalho ou GC do servidor, e se aplica apenas às coleções de geração 2.

A coleta de lixo em segundo plano está habilitada por padrão. Ele pode ser habilitado ou desabilitado com a configuração gcConcurrent em aplicativos .NET Framework ou a configuração System.GC.Concurrent em aplicativos .NET Core e .NET 5 e posteriores.

Nota

A coleta de lixo em segundo plano substitui a coleta de lixo simultânea e está disponível no .NET Framework 4 e versões posteriores. No .NET Framework 4, ele é suportado apenas para a coleta de lixo da estação de trabalho . A partir do .NET Framework 4.5, a coleta de lixo em segundo plano está disponível para a coleta de lixo da estação de trabalho e do servidor .

Uma coleta sobre gerações efêmeras durante a coleta de lixo de fundo é conhecida como coleta de lixo em primeiro plano . Quando ocorrem coletas de lixo em primeiro plano, todos os threads gerenciados são suspensos.

Quando a coleta de lixo em segundo plano está em andamento e você alocou objetos suficientes na geração 0, o CLR executa uma coleta de lixo em primeiro plano de geração 0 ou geração 1. O thread dedicado de coleta de lixo em segundo plano verifica em pontos seguros frequentes para determinar se há uma solicitação de coleta de lixo em primeiro plano. Se houver, a coleta em segundo plano se suspende para que a coleta de lixo em primeiro plano possa ocorrer. Depois que a coleta de lixo em primeiro plano for concluída, os threads dedicados de coleta de lixo em segundo plano e os threads de usuário serão retomados.

A coleta de lixo em segundo plano remove as restrições de alocação impostas pela coleta de lixo simultânea, porque as coletas de lixo efêmeras podem ocorrer durante a coleta de lixo em segundo plano. A coleta de lixo de fundo pode remover objetos mortos em gerações efêmeras. Ele também pode expandir a pilha, se necessário, durante uma coleta de lixo de geração 1.

Estação de trabalho em segundo plano vs. GC do servidor

A partir do .NET Framework 4.5, a coleta de lixo em segundo plano está disponível para o GC do servidor. GC em segundo plano é o modo padrão para a coleta de lixo do servidor.

A coleta de lixo do servidor em segundo plano funciona de forma semelhante à coleta de lixo da estação de trabalho em segundo plano, mas há algumas diferenças:

  • A coleta de lixo da estação de trabalho em segundo plano usa um thread de coleta de lixo em segundo plano dedicado, enquanto a coleta de lixo do servidor em segundo plano usa vários threads. Normalmente, há um thread dedicado para cada processador lógico.

  • Ao contrário do thread de coleta de lixo em segundo plano da estação de trabalho, os threads GC do servidor em segundo plano não atingem o tempo limite.

A ilustração a seguir mostra a coleta de lixo da estação de trabalho em segundo plano realizada em um thread separado e dedicado:

Background workstation garbage collection

A ilustração a seguir mostra a coleta de lixo do servidor em segundo plano executada em threads separados e dedicados:

Background server garbage collection

Recolha simultânea de lixo

Gorjeta

Esta secção aplica-se a:

  • .NET Framework 3.5 e versões anteriores para coleta de lixo da estação de trabalho
  • .NET Framework 4 e versões anteriores para coleta de lixo do servidor

O lixo simultâneo é substituído pela coleta de lixo em segundo plano em versões posteriores.

Na coleta de lixo da estação de trabalho ou do servidor, você pode habilitar a coleta de lixo simultânea, o que permite que os threads sejam executados simultaneamente com um thread dedicado que executa a coleta de lixo durante a maior parte da duração da coleta. Esta opção afeta apenas as coletas de lixo na geração 2; As gerações 0 e 1 são sempre não concorrentes porque terminam rápido.

A coleta simultânea de lixo permite que os aplicativos interativos sejam mais responsivos, minimizando as pausas de uma coleta. Os threads gerenciados podem continuar a ser executados na maioria das vezes enquanto o thread de coleta de lixo simultâneo está em execução. Esse design resulta em pausas mais curtas enquanto ocorre uma coleta de lixo.

A coleta simultânea de lixo é realizada em um thread dedicado. Por padrão, o CLR executa a coleta de lixo da estação de trabalho com a coleta de lixo simultânea habilitada em computadores com processador único e multiprocessador.

A ilustração a seguir mostra a coleta de lixo simultânea realizada em um thread dedicado separado.

Concurrent Garbage Collection Threads

Consulte também