Quais são as fases de limpeza de recursos na gestão de memória?
sobes.tech IA
Resposta da IA
O gerenciamento de memória no .NET inclui as seguintes fases de limpeza de recursos:
-
Fase de marcação (Marking): O coletor de lixo determina quais objetos estão acessíveis a partir dos objetos raiz (variáveis de pilha, variáveis estáticas e registros). Objetos inacessíveis são marcados para coleta.
-
Fase de realocação (Relocating/Compacting): Os objetos acessíveis são movidos (compactados) na memória, liberando espaço contínuo e reduzindo a fragmentação. Durante esse processo, os ponteiros para os objetos realocados são atualizados. Essa fase ocorre apenas em compilações diferentes do modo de fundo.
-
Fase de varredura (Sweeping): Os métodos finais (
Finalize) dos objetos marcados para coleta são chamados, se estiverem definidos. Depois, a memória ocupada por esses objetos é liberada.
Exemplo de uso de Finalize (não recomendado, é melhor usar IDisposable):
public class ResourceHolder
{
// Recurso que requer liberação
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// Método finalizador, chamado pelo coletor de lixo
~ResourceHolder()
{
// Liberar recurso não gerenciado
_writer?.Dispose();
}
// Outros métodos da classe...
}