Sobes.tech
Junior

¿Qué es el recolector de basura en C#?

sobes.tech AI

Respuesta de la IA

El recolector de basura en C# es un proceso automatizado de gestión de memoria. Libera la memoria ocupada por objetos que ya no son utilizados por la aplicación.

Aspectos clave:

  • Gestión automática: El desarrollador no necesita asignar o liberar memoria manualmente para la mayoría de los objetos. El CLR (Common Language Runtime) lo hace automáticamente.
  • Seguimiento de referencias: El recolector de basura determina qué objetos están accesibles desde las fuentes raíz (por ejemplo, pilas de hilos, campos estáticos). Los objetos sin referencias desde estas fuentes se consideran inalcanzables y son recolectados.
  • Generaciones: El montón se divide en generaciones (0, 1 y 2). Los objetos que "sobreviven" después de la recolección se mueven a generaciones superiores. Esto optimiza el proceso, ya que la mayoría de los objetos viven poco tiempo.
  • Finalización: Los objetos pueden tener un método Finalize, que el recolector de basura llama antes de liberar la memoria. Se usa para limpiar recursos no gestionados, pero su uso está limitado por el tiempo impredecible de ejecución.
  • Compactación: Después de la recolección, el recolector puede mover los objetos supervivientes para reducir la fragmentación de la memoria.
// Ejemplo de creación de un objeto en el montón gestionado
MyClass obj = new MyClass();
// Cuando ya no hay referencias a obj, el recolector puede liberar la memoria

// Ejemplo de liberación manual de recursos no gestionados usando IDisposable y using
// En lugar de Finalize, se recomienda este método
using (var resource = new UnmanagedResourceWrapper())
{
    // Uso del recurso
} // Aquí se llama a resource.Dispose(), limpiando el recurso no gestionado