Sobes.tech
Junior

O que é o coletor de lixo em C#?

sobes.tech IA

Resposta da IA

O garbage collector em C# é um processo automatizado de gestão de memória. Liberta a memória ocupada por objetos que já não são utilizados pela aplicação.

Aspectos-chave:

  • Gestão automática: O desenvolvedor não precisa de alocar ou libertar manualmente memória para a maioria dos objetos. O CLR (Common Language Runtime) faz isso automaticamente.
  • Rastreamento de referências: O garbage collector determina quais objetos estão acessíveis a partir das fontes raiz (por exemplo, pilhas de threads, campos estáticos). Objetos sem referências dessas fontes são considerados inacessíveis e são recolhidos.
  • Gerações: O heap é dividido em gerações (0, 1 e 2). Objetos que "sobrevivem" após a recolha são movidos para gerações superiores. Isto otimiza o processo, pois a maioria dos objetos vive pouco tempo.
  • Finalização: Os objetos podem ter um método Finalize, que o garbage collector chama antes de libertar a memória. Usado para limpar recursos não geridos, mas o seu uso é limitado pelo tempo de execução imprevisível.
  • Compactação: Após a recolha, o garbage collector pode mover objetos sobreviventes para reduzir a fragmentação da memória.
// Exemplo de criação de um objeto no heap gerido
MyClass obj = new MyClass();
// Quando já não há referências a obj, o garbage collector pode libertar a memória

// Exemplo de libertação manual de recursos não geridos usando IDisposable e using
// Abordagem recomendada em vez de Finalize
using (var resource = new UnmanagedResourceWrapper())
{
    // Uso do recurso
} // Aqui, resource.Dispose() é chamado, limpando o recurso não gerido