Recolección de basura en JavaScript

En este capítulo, vamos a ver cómo JavaScript gestiona su memoria. JavaScript es un lenguaje único, es capaz de asignar memoria automáticamente una vez que los objetos se crean y liberarla cuando ya no se utilizan. En cambio, los lenguajes de bajo nivel requieren determinar manualmente en qué punto del programa la memoria asignada ya no es necesaria y liberarla. Entonces, veamos qué sucede en un lenguaje de alto nivel como JavaScript cuando ya no necesitas nada. Cómo el motor de JavaScript lo descubre y lo limpia.

El concepto primario

La accesibilidad es el concepto principal de la gestión de memoria de JavaScript. Los valores que son accesibles y utilizables se conocen como accesibles. A continuación, encontrarás el conjunto de valores accesibles base:

Los valores anteriores se llaman las raíces.

Otros valores se conocen como accesibles una vez que son accesibles desde una raíz por una cadena de referencias o una sola referencia.

Considera un objeto dentro de una variable local. Si ese objeto tiene una propiedad que hace referencia a otro objeto, ese objeto se llama accesible. Las referencias también son accesibles.

En JavaScript, existe un proceso en segundo plano, llamado recolector de basura. Es capaz de monitorear todos los objetos y eliminar los que se han vuelto inaccesibles.

Para una mejor percepción, revisa el ejemplo a continuación:

Javascript object reference
// book has a reference to the object let book = { name: "Javascript" }; console.log(book);

Como puedes ver, la referencia del objeto se representa con la flecha. La variable global "book" está haciendo referencia al objeto. La propiedad "name" almacena un primitivo.

En caso de que el valor de book sea sobrescrito, se perderá la referencia, como se muestra a continuación:

Javascript object reference lost
// book has a reference to the object let book = { name: "Javascript" }; book = null; console.log(book);

Así, el objeto se vuelve inaccesible. El recolector de basura desecha los datos, liberando la memoria.

Un caso de dos referencias

En esta sección, consideremos que la referencia fue copiada de book a language como esto:

Javascript object a case of two reference
// book has a reference to the object let book = { name: "Javascript" }; let language = book; console.log(language);

Ahora, hacer lo mismo se verá así:

Javascript object reference lost
// book has a reference to the object let book = { name: "Javascript" }; let language = book; console.log(language); book = null; console.log(book);

El objeto seguirá siendo accesible a través de la variable global language. Está en la memoria. Después de sobrescribir language, se puede eliminar.

Algoritmos internos

El algoritmo principal de la recolección de basura es conocido como "mark-and-sweep". Regularmente se realizan algunos pasos de recolección de basura. Aquí están:

  • El recolector toma las raíces y las marca, recordándolas.
  • Posteriormente, visita y marca todas las referencias de ellas.
  • El siguiente paso es visitar a los objetos marcados, marcando sus referencias. No es posible visitar el mismo objeto dos veces, ya que todos los objetos visitados se recuerdan.
  • El proceso continúa hasta que se visite cada una de las referencias accesibles.
  • Todos los objetos, excepto los objetos marcados, se eliminan.

Y, finalmente, los objetos que no pudieron ser visitados durante el proceso anterior, se consideran inaccesibles y se van a eliminar.

Por lo tanto, el proceso descrito de la recolección de basura funciona correctamente. Pero, JavaScript incluye diferentes optimizaciones para hacerlas funcionar aún mejor y más rápido. Entre esas optimizaciones se encuentran la recolección generacional, la recolección incremental y la recolección en tiempo de inactividad.

Resumen

La recolección de basura es un proceso que se implementa automáticamente. No se puede forzar ni prevenir de ninguna manera.

Los objetos pueden ser retenidos en la memoria mientras sean accesibles.

Es esencial saber que ser referenciado no es similar a ser accesible. Los algoritmos avanzados de recolección de basura son realizados por motores modernos.

Hora del Cuestionario: ¡Pon a Prueba Tus Habilidades!

¿Listo para desafiar lo que has aprendido? Sumérgete en nuestros cuestionarios interactivos para una comprensión más profunda y una forma divertida de reforzar tu conocimiento.

¿Te resulta útil?