Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Na coleta de lixo em segundo plano (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 do tipo de coleta (de estação de trabalho ou servidor), e é aplicada somente às coletas de geração 2.
A coleta de lixo em segundo plano é 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.
Observação
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, há suporte apenas para coleta de lixo de estação de trabalho . A partir do .NET Framework 4.5, a coleta de lixo em segundo plano está disponível tanto para coleta em estações de trabalho quanto em servidores.
Uma coleta em gerações efêmeras durante a coleta de lixo em segundo plano é conhecida como coleta em primeiro plano. Quando as coletas de lixo em primeiro plano ocorrem, todos os threads gerenciados são suspensos.
Quando a coleta de lixo em segundo plano está em andamento e você aloca 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 frequentes de segurança se há uma solicitação de coleta de lixo em primeiro plano. Se houver, a coleta de plano de fundo suspende a si mesma para que a coleta de lixo em primeiro plano possa ocorrer. Após a conclusão da coleta de lixo em primeiro plano, os threads dedicados de coleta de lixo em segundo plano e os threads de usuário são retomados.
A coleta de lixo em segundo plano remove as restrições de alocação impostas pela coleta de lixo simultânea, pois coletas de lixo efêmeras podem ocorrer durante a coleta de lixo em segundo plano. A coleta de lixo em segundo plano pode remover objetos mortos em gerações efêmeras. Ela também pode expandir o heap, se necessário, durante uma coleta de lixo de geração 1.
GC de estação de trabalho vs. de servidor em segundo plano
A partir do .NET Framework 4.5, a coleta de lixo em segundo plano está disponível para o GC do servidor. O GC em segundo plano é o modo padrão para 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 em segundo plano da estação de trabalho usa um thread dedicado, enquanto a coleta de lixo em segundo plano do servidor usa vários threads. Normalmente, há um thread dedicado para cada processador lógico.
Ao contrário do thread de coleta de lixo de estação de trabalho em segundo plano, os threads da GC de servidor não atingem o tempo limite.
A ilustração a seguir mostra a coleta de lixo de estação de trabalho em segundo plano executada em um thread dedicado separado:
A ilustração a seguir mostra a coleta de lixo do servidor em segundo plano executada em threads separados e dedicados:
Coleta de lixo simultânea
Dica
Esta seção se aplica a:
- .NET Framework 3.5 e anteriores para coleta de lixo de estação de trabalho
- .NET Framework 4 e 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 de servidor ou estação de trabalho, você pode habilitar a coleta de lixo simultânea, que permite que os threads são executados simultaneamente com um thread dedicado que executa a coleta de lixo durante a maior parte da coleta. Essa opção afeta apenas as coletas de lixo na geração 2; as gerações 0 e 1 são sempre não simultâneas porque terminam rapidamente.
A coleta de lixo simultânea permite que aplicativos interativos sejam mais responsivos minimizando pausas para uma coleção. Os threads gerenciados podem continuar a ser executados na maior parte do tempo enquanto o thread de coleta de lixo simultâneo está em execução. Esse design resulta em pausas mais curtas enquanto uma coleta de lixo está ocorrendo.
A coleta de lixo simultânea é executada em um thread dedicado. Por padrão, o CLR executa a coleta de lixo de estação de trabalho com coleta de lixo simultânea habilitada em computadores de processador único e multiprocessador.
A ilustração a seguir mostra a coleta de lixo simultânea executada em um thread dedicado separado.