Sobes.tech
Junior

Qual é o conceito de recolha de lixo em C#?

sobes.tech IA

Resposta da IA

A recolha de lixo em C# é um processo automático de gestão de memória realizado pelo ambiente de execução .NET (CLR). O seu objetivo principal é libertar a memória ocupada por objetos aos quais já não há referências a partir das fontes raiz (por exemplo, a pilha ou campos estáticos).

Princípio de funcionamento:

  1. Acompanhamento de objetos: O recolhedor de lixo monitora os objetos criados no monte gerido.
  2. Determinação de acessibilidade: Determina quais objetos são "acessíveis" (acessíveis a partir das fontes raiz) e quais não são.
  3. Libertação de memória: Objetos inacessíveis são marcados como lixo. Posteriormente, o recolhedor de lixo liberta a memória que ocupam, tornando-a disponível para novos objetos.
  4. Compactação: Em alguns casos, o recolhedor de lixo pode mover os objetos restantes no monte para reduzir a fragmentação e melhorar o desempenho de futuras alocações de memória.

A ideia baseia-se na gestão de memória baseada na acessibilidade, libertando o programador da alocação e libertação manual de memória, o que reduz a probabilidade de erros relacionados com a memória (por exemplo, fugas de memória ou acesso a memória libertada).

A recolha de lixo funciona em segundo plano e pode ser suspensa pela aplicação por um curto período durante a execução. O CLR utiliza várias gerações (geração 0, 1, 2) para otimizar o processo, recolhendo objetos mais pequenos e de vida mais curta com maior frequência.