Junior
O que é o coletor de lixo (Garbage Collector) em C#?
sobes.tech IA
Resposta da IA
O recolhedor de lixo em C# faz parte do ambiente de execução .NET (CLR), que gere automaticamente a memória libertando recursos ocupados por objetos que já não estão acessíveis.
Princípios de funcionamento:
- Rastreamento de objetos: O recolhedor de lixo rastreia os objetos criados no monte gerido.
- Determinação de acessibilidade: Determina quais objetos são acessíveis ao código em execução (ou seja, que têm referências válidas).
- Recolha de objetos inacessíveis: Os objetos que já não são acessíveis são considerados "lixo" e podem ser removidos com segurança.
O processo de recolha inclui:
- Marcação (Marking). O GC escaneia a pilha e os registos para encontrar as raízes (objetos raízes). A partir das raízes, percorre o grafo de objetos, marcando os objetos acessíveis.
- Compactação (Compacting). Permite reduzir a fragmentação da memória. O GC move os objetos acessíveis para um bloco contíguo de memória, deixando espaço livre.
- Varredura (Sweeping). Os objetos inacessíveis (não marcados) são eliminados e a sua memória é libertada.
Características principais:
- Gestão automática: Elimina a responsabilidade manual do programador para libertar memória.
- Gerações: O monte é dividido em gerações (Gen 0, Gen 1, Gen 2). Isto otimiza a recolha, pois a maioria dos objetos torna-se lixo rapidamente. Os objetos novos são criados em Gen 0. Se um objeto sobrevive à recolha em Gen 0, é movido para Gen 1, e assim por diante.
- Finalizadores e libertação (Finalizers and Disposal): O GC não garante a execução imediata dos finalizadores para objetos que implementam
IDisposable. Para libertar recursos não geridos, deve-se usar um mecanismo explícito (Dispose(), declaraçãousing).
// Exemplo de uso da declaração using para libertar recursos explicitamente
using (var stream = new System.IO.FileStream("temp.txt", System.IO.FileMode.Create))
{
// Trabalhar com o ficheiro
} // stream.Dispose() será chamado automaticamente