¿Cuáles son las fases de limpieza de recursos en la gestión de memoria?
sobes.tech AI
Respuesta de la IA
La gestión de memoria en .NET incluye las siguientes fases de limpieza de recursos:
-
Fase de marcado (Marking): El recolector de basura determina qué objetos están accesibles desde los objetos raíz (variables de pila, variables estáticas y registros). Los objetos inaccesibles se marcan para su recolección.
-
Fase de reubicación (Relocating/Compacting): Los objetos accesibles se mueven (compactan) en la memoria, liberando espacio contiguo y reduciendo la fragmentación. Durante este proceso, se actualizan los punteros a los objetos reubicados. Esta fase solo está presente en compilaciones distintas a la en segundo plano.
-
Fase de limpieza (Sweeping): Se llaman los métodos finales (
Finalize) de los objetos marcados para recolección, si están definidos. Luego, se libera la memoria ocupada por estos objetos.
Ejemplo de uso de Finalize (no recomendado, es mejor usar IDisposable):
public class ResourceHolder
{
// Recurso que requiere liberación
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// Método finalizador, llamado por el recolector de basura
~ResourceHolder()
{
// Liberar recurso no gestionado
_writer?.Dispose();
}
// Otros métodos de la clase...
}