Sobes.tech
Middle

¿Qué sabes sobre el recolector de basura en Dart?

sobes.tech AI

Respuesta de la IA

Dart utiliza un recolector de basura de un solo hilo basado en la recolección generacional.

Características clave:

  • Recolección generacional: Los objetos se dividen en dos generaciones:
    • Generación joven: Objetos nuevos y de corta duración. Se recolectan con frecuencia.
    • Generación vieja: Objetos de larga duración que han sobrevivido a varias recolecciones en la generación joven. Se recolectan con menos frecuencia.
  • Stop-the-World: Para realizar la recolección de basura, es necesario detener la ejecución del programa (Dart Isolates). Sin embargo, gracias a la unidireccionalidad y optimizaciones, las demoras son mínimas.
  • Marcar y barrer: En la generación vieja se usa el algoritmo Mark-and-Sweep. Primero se marcan los objetos alcanzables, luego se eliminan los inalcanzables. Para la generación joven, se usa el algoritmo Copying Collector, que mueve rápidamente los objetos vivos a otro espacio de memoria.
  • No hay ciclos en la recolección de basura: El desarrollador no necesita gestionar manualmente la memoria ni llamar al GC. El sistema lo hace automáticamente.
  • Optimizaciones: Incluyen inline de funciones, especialización de tipos y asignación de objetos en la pila, lo que reduce la carga en el recolector de basura.

Por ejemplo, al crear un nuevo objeto:

// Creación de un nuevo objeto en la "generación joven" de memoria
var myObject = MyClass();

Si myObject permanece en memoria y accesible durante mucho tiempo, eventualmente será movido a la "generación vieja". Si deja de ser alcanzable, el recolector de basura lo liberará eventualmente.

// myObject ahora no es alcanzable, puede ser recolectado por el recolector de basura
myObject = null;

Es importante entender que el recolector de basura en Dart es eficiente, pero no es una panacea contra las fugas de memoria, que pueden ocurrir debido a la conservación de referencias fuertes a objetos que ya no son necesarios (por ejemplo, suscripciones que no se cancelaron).