No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

19 Días
13 Hrs
37 Min
29 Seg

Garbage Collection

9/13
Recursos

Garbage Collection es un proceso automático realizado por el motor de JavaScript que consiste en eliminar aquellos objetos que no tienen referencias o son inalcanzables para el contexto de ejecución, a través del algoritmo mark-and-sweep (marcado y barrido).

Algoritmo marcado y barrido

El Garbage Collection es importante para liberar aquellas referencias en memoria y no exista un desbordamiento en las tareas (Stack overflow). Por ejemplo, un ciclo infinito que provoque el colapso de la página web.

Algoritmo marcado y barrido

El algoritmo marcado y barrido (mark-and-sweep) hace referencia a cuando un tipo de dato se vuelve inalcanzable para el programa. El motor de JavaScript empieza por la raíz, la cual es el Objeto Global, a medida que el programa avanza los objetos van creando o borrando referencias a sus raíces.

Cuando un objeto se queda ninguna referencia, se dice que el objeto es inalcanzable, en este momento el Garbage Collection libera el espacio que usaban las variables u objetos cuando aún tenían una referencia.

Desde 2012, los navegadores utilizan un Garbage Collection, que ha ido recibiendo mejoras en su implementación constantemente.

Ejemplo que actúa el Garbage Collection

En este punto de tu estudio, ya conocerás los métodos shift y pop de arrays, puede que los hayas entendido como eliminar el primer y último elemento de un array, respectivamente.

Pues no funcionan exactamente como “eliminar”, sino como extraer el primer y último elemento, pero si no lo guardamos en una variable, el Garbage Collection lo eliminará.

const array = [1,2,3,4,5]
// Extrae el último elemento, guarda la referencia en la variable lastElement.
const lastElement = array.pop() 
console.log(lastElement) //5
const array = [1,2,3,4,5]
// Extrae el último elemento, pero no existe la referencia, entonces el Garbage Collection lo eliminará
array.pop() 
console.log(array) // [1,2,3,4]

Por lo tanto, el que elimina ese valor, es el Garbage Collection.

Contribución creada por Andrés Guano, con aportes de Sergio Estrella y Nathaly Stefani Riaño Bejarano.

Aportes 73

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Garbage Collection: limpia la memoria de los datos no utilizados para no sobrecargarla y seguir trabajando sin problemas.

La referencia sutil/nada sutil a Stack Overflow xD

Garbage Collection -> implementa el Mark Sweep para las cosas que no se ocupa

Entonces, llegamos a lo mismo…

¡Es mejor no usar var para declarar una variable! Es mejor usar const o let para no redefinir una variable que no queramos que cambie…

Garbage collecction es el proceso de rastrear los “desechos” y limpiar la memoria(Mark and Sweep) para evitar un overstack.
Mark and sweep es el proceso en el que marca(mark) los espacios de memoria no utilizados en el heap y los elimina(sweep).

JS es un lenguaje recolector de basura, es decir, el contexto de ejecución es responsable de la memoria requerida durante la ejecución del código. Esta característica libera a los desarrolladores de la preocupación acerca de la administración de la memoria. Lo que hace es alojar lo que es necesario y reclama la memoria que ya no está siendo usada.

Muy por encima esta clase, siento mucho ser el que siempre critica pero acá no esta diciendo casi nada. Lo de Mark and Sweep nisiquiera lo explicó. A los que pasen por acá les recomiendo que mejor lean los comentarios y entren a los links que dejan sobre este tema. Te explican muy bien como funciona el Garbage Collection. Te dejo uno por acá: https://developer.mozilla.org/es/docs/Web/JavaScript/Gestion_de_Memoria

El Garbage Collection: Durante el proceso de ejecución de javascript en nuestro navegador, habrá un algorimo que estará pendiente del estado del memory heap cuyo trabajo sera buscar y eliminar datos no necesarios y asi liberarar espacio para la memoria, esto es muy util para que una variable pueda ser renombrada con una dato mucho mas nuevo. El garbage collection es muy importante debido a que con ella podemos recolectar o almacenar datos que el navegador no usa pero que a futuro podamos usarlo para nuestro fin.

En pocas palabras como JS tiene un Garbage collector automático, no hay necesidad de preocuparse mucho por él… 😄

No había visto apuntes en ningún curso con animaciones…este de V8 esta repleto de excelentes animaciones

GARBAGE COLLECTION
para barrer con variables que ya no usamos
mark
sweep

Ok, esto funciona por default

Este es el gif del profe:

.
Encontré este otro, no se si hace referencia a la memoria Heap:

Garbage Collection: Limpia la memoria con los datos que no son usados.
Mark and Sweep: Periódicamente se va recorriendo desde el objeto global (window) hacia todas sus raíces de esta forma sabe que objeto es alcanzable y cuales son los inalcanzables (un objeto sin referenciar es inalcanzable) y simplemente borra los inalcanzable

<h3>Reserva de memoria en JavaScript</h3>

Inicialización de valores

Para no agobiar al programador con reservas de memoria, JavaScript las realiza al mismo tiempo que la declaración de los valores.

var n = 123; // reserva memoria para un número
var s = "azerty"; // reserva memoria para un string

var o = {
  a: 1,
  b: null
}; // reserva memoria para un objeto y los valores que
   // contiene

// (similar a objeto) reserva memoria para el arreglo y
// los valores que contiene
var a = [1, null, "abra"];

function f(a){
  return a + 2;
} // reserva memoria para una funcion (la cual es un objeto)

// las expresiones de función tambien reservan memoria para un objeto
someElement.addEventListener('click', function(){
  someElement.style.backgroundColor = 'blue';
}, false);

Reserva de memoria al llamar una función

En ocasiones al llamar a una función se reserva memoria para un objeto.

var d = new Date();
// reserva memoria para un elemento del DOM
var e = document.createElement('div');

Algunos métodos reservan memoria para nuevos valores u objetos:

var s = "azerty";
var s2 = s.substr(0, 3); // s2 es un nuevo string
// Como los strings son valores inmutables,
// JavaScript puede NO reservar memoria para este,
// y solo almacenar el rango [0, 3].

var a = ["ouais ouais", "nan nan"];
var a2 = ["generation", "nan nan"];
var a3 = a.concat(a2);
// nuevo arreglo con 4 elementos resultado de
// concatenar los elementos de a y a2

Liberar la memoria cuando ya no es necesaria

En este punto ocurren la mayoria de los inconvenientes con la gestión de memoria. Lo más díficil es encontrar el cuándo la “memoria ya no es necesaria”. En algunas ocasiones, es necesario que el desarrollador determine en qué parte de un programa esa parte de memoria ya no es necesaria y la libere.

Los lenguajes de alto nivel incluyen una herramienta de software conocida como "recolector de basura" (garbage collector), cuya función es rastrear las reservas de memoria y su utilización, para así encontrar cuándo cierta parte de la memoria ya no es necesaria, y en su momento liberarla automáticamente. Este proceso es sólo una aproximación al problema general de saber cuándo una parte de la memoria ya no es necesaria, ya que éste es indecidible (no puede ser resuelto por un algoritmo).

Ref. JS Memory Management

El algoritmo de marcado y barrido se denomina recolector de basura de rastreo porque rastrea la colección completa de objetos a los que el programa puede acceder directa o indirectamente.

By: https://bit.ly/2JmOhZF

He buscado pero no he encontrado nada, ¿hay manera de liberar memoria de manera manual en JavaScript?

Para el caso de las variables entiendo que las podemos definir a null cuando ya no la estemos utilizando para asi liberar memoria, aunque entiendo que en memoria se quedará ahora ese valor null

Entonces, el Garbage Collector nos ayuda a limpiar la memoria de los datos ya no se utilizan, JavaScript nos ayuda con esta parte usando Mark and Sweep que se aplica cuando una variable es renombrada, deja de guardar ese dato para no saturar el Stack

Ojala y no este mal, pero el hecho de que usemos **const **y **let **nos permite que el Garbage Collection haga Mark & Sweep cada que son llamadas, de esta manera desocupamos la memoria cada vez que salimos del scope.

Buena explicación, a veces no se necesitan muchos tecnicismos ni videos largos, basta con ir al grano como en esta clase y la idea se entiende a la perfección.

GARBAGE COLLECTION.
In JavaScript exist a mark by default to erase the variables and values that we don’t use again or we overwrite. An example can be when a variable is redeclare or inside a low scope like a function where the variables are periodic.
In other languages is the coder who has to mark this variables and erase them to avoid a called “overflow”, literally a massive storage of variables within the “memory heap”.

Garbage Collection: limpia la memoria de los datos no utilizados para no sobrecargarla y seguir trabajando sin problemas.

Es importante saber esta clase de detalles para conocer como funciona el JS de fondo. Más allá de saber que hacen los elementos, importa mucho el lenguaje en sí.

¡¡¡Pregunta de entrevista técnica y te pueden descalificar por eso: Mark and Sweep!!!

Increíble, normalmente en otros lenguajes tienes que “unsetear” esos valores, algo genial es que, JavaScript también tiene una palabra reservada llamada “delete” que te da a ti la capacidad de hacer la limpieza manualmente ^^

En el lenguaje de programación C no existe un Garbage Collection por defecto, así que a nosotros nos toca hacerlo a mano. Por eso es importante saber como funciona y como lidiar con eso.

Ciclo de vida de memoria
Sin importar el lenguaje de programación, el ciclo de memoria es casi siempre parecido al siguiente:

Reservar la memoria necesaria
Utilizarla (lectura, escritura)
Liberar la memoria una vez ya no es necesaria.
El primer y el segundo paso son explícitos en todos los lenguajes. El último paso es explícito en lenguajes de bajo nivel, pero es mayormente implícito en lenguajes de alto nivel como JavaScript

Hasta ahora no conocía la mayoría de los conceptos tocados, me interesa mucho saber a profundidad como trabaja un lenguaje de programación!

Entendido

Esto es automático? Cada cuánto está revisando si hay algo para eliminar?

Todos hemos cometido el error de un ciclo infinito jaja no sabía que fallaba por la Memory Heap

Podriamos decir que JS tiene un Garbge collection automatico o un mark sweep automatico?

Interesentate funcionamiento😊 sobre como gestiona memoria. Asi que GC encarga de identificar y eliminar la memoria ocupada por objetos que ya no están en uso por el programa. (Los recicla según entiendo)

En algunos lenguajes de programación tendremos que controlar la memoria ya que esta puede desbordarse y tenemos que preguntarnos en que momento necesitamos tirar todas las cosas que ya no ocupamos y hay que limpiar todo esto. Esto se llama Garbage Collection.

En JS esto se hace en dos pasos, una vez que haya detectado los elementos u objetos que ya no utilizamos, hace un Mark y después sweep a todo lo que no se ocupa. Esto JS nos lo hace de forma automática, pero hay que tener cuidado porque puede llegar un momento donde llenemos la memoria y rompamos el navegador

*este video me ayudo mucho sobre estos tres ultimos videos, lo dejo por si alguien le sirve.* <https://www.youtube.com/watch?v=5OJRqkYbK-4>
Mi resumen sobre la clase: ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-06-15%20a%20la%28s%29%2011.38.03-5d915273-6712-4c03-90ae-336e2eeb6618.jpg)
Soy el unico que cada vez se enamor mas de Diego? Uwu
Importante.- Garabage Collection usa el algoritmo "mark and sweep".

Mark-and-sweep = marcado y barrido
Garbage colletion = eliminar aquellos objetos que no tienen referencia al momento de ejecución

Diego me agrada, ya tomé varios cursos con él, PERO me parece muy básica la explicación, hay mucho que abarcar sobre este tema de Garbage Collection. Platzi se enfoca más en la cantidad de clases y cursos, que en la calidad de los mismos. Es una vergüenza que haya videos mejor editados y explicados en Youtube, que es prácticamente gratis !!.

Garbage Collection es como ella…cuando ya no tienes alguna referencia en su corazón, simplemente aplica el Sweep y da paso al siguiente 😛.

Es bastante bueno que JS se limpie solito, es como si una casa estuviera limpiandose constantemente, un milagro hecho realidad.

De alguna forma nos agiliza tanto tecnico como visualmente nuestro entorno, elimando el código obsoleto o que no se va a volver a usar

Los lenguajes de bajo nivel, como C, tienen primitivos de bajo nivel como malloc() y free() para la gestión de memoria. Por otro lado, para los valores en JavaScript se reserva memoria cuando"cosas" (objetos, strings, etc.) son creados y “automáticamente” liberados cuando ya no son utilizados. El proceso anterior es conocido como Recolección de basura (garbage collection). Su forma “automática” es fuente de confusión, y da la impresión a los desarrolladores de JavaScript (y de otros lenguajes de alto nivel) de poder ignorar el proceso de gestión de memoria. Esto es erróneo.

Fuente ()[https://developer.mozilla.org/es/docs/Web/JavaScript/Memory_Management]

Mega interesante, Ósea que si hay algo que no necesito se elimina del Root Set, pero esto se podría recuperar o eso no es posible? hay forma de leer lo que esta en Mark?

Los lenguajes de alto nivel incluyen una herramienta de software conocida como “recolector de basura” (garbage collector), cuya función es rastrear las reservas de memoria y su utilización, para así encontrar cuándo cierta parte de la memoria ya no es necesaria, y en su momento liberarla automáticamente. Este proceso es sólo una aproximación al problema general de saber cuándo una parte de la memoria ya no es necesaria, ya que éste es indecidible (no puede ser resuelto por un algoritmo).

Source

Buenas, como estan! Les comparto mi carpeta de Google Docs para que entre todos podamos seguir aportando a la toma de notas de un montón de los cursos de Platzi. Hagamos una comunidad!!!

https://drive.google.com/drive/folders/1SWGMgTMPbwgasbzcivcpcnIudc2vk_v0?usp=sharing

Articulo que nos ayudara a comprender mejor este proceso.

https://dev.to/supminn/garbage-collection-in-javascript-56e0

En lenguajes como C / C++, uno como desarrollador tiene que encargarse del Garbage Collection

Ejemplo:

Cuando nombras una variable y luego cambias ese valor. El Garbage collector se encargará de tomar la información antigua y recolectarla para liberar espacio en memoria. Dejando solamente la información que estás utilizando, en el caso de la variable, el último valor asignado.

Garbage Collection

Cunado el engine detecta elementos que ya no son utilizado hace un mark and sweep para liberar espacio de memoria por ejemplo la reasignación de una variable

let primero = "Uno";
primero = 1
/*Se reasigna el primer indicador con el string 
y se elimina en el proceso de mark and sweep 
quedando el valor entero*/
var carro = {
    marca: "Toyota",
    modelo: "2020"    
}

carro = "Mio";
  • Los lenguajes de alto nivel como JavaScript hacen uso de una herramienta llamada Garbage Collector (recolector de basura). Esta herramienta hace uso del algoritmo Mark & Sweep para retirar los datos que ya no se están utilizando en memoria y retirar ese espacio para evitar que el programa vaya lento.

  • El algoritmo Mark & Sweep consiste en que primero realiza un proceso de marcado (mark) a los espacios, variables, objetos que no se están utilizando en la memoria y los barre (sweep).

Desde el 2012, todos los navegadoras han estado usando esta herramienta con el algoritmo de mark & sweep.

¿Cómo funciona realmente este algoritmo?

  • Este algoritmo hace referencia a cuando un objeto se vuelve inalcanzable en el programa, es decir, cuando un objeto ya no está referenciado. Esto significa que si tenemos una variable con cierto valor y luego le asignamos otro valor, destruye la variable con el anterior valor y crea una nueva con el valor que le asignamos.

  • Esto significa que si tenemos un objeto con el valor 3 y luego asignamos este objeto nuevamente con el valor 5, lo que hace garbage collector es destruir el objeto 3 y crear el mismo objeto con el valor 5, liberando el espacio que tenía en memoria el objeto 3.

para complementar los recomiendo este increible articulo hablando de como funciona la memoria en js
JavaScript’s Memory Management Explained

Garbage collection: Proceso de rastrear “variables, funciones y cosas que ya no ocupas” y limpiar la memoria.
Mark: Marca los espacios de memoria no utilizados
Sweep: Hace el barrido, los elimina.

  • El garbage collector limpia la memoria de los objetos no usados. Js hace uso del garbage collector a través de mark and sweep.

Recolección de basura:

  • La recolección de basura es una forma de administración automática de memoria. El recolector de basura, o simplemente el recolector, intenta recuperar la basura o la memoria ocupada por objetos que ya no están en uso por el programa.

Genial!

No tenía ni idea del concepto de Garbage Collection, pero ahorá sé a grandes rasgos para que sirve

Excelente.

Genial. que gran clase

Momento exacto donde se demuestra que Diego está haciendo el curso de programación básica xd

Buena info neni

Muy bueno!

Se que no adopte buenas practicas, pero para q se vea mejor. Una duda que me surgio es como actuaba estode borrar las Variables, y si se ejecuta ese codigo primero utiliza la Var cosa = 1 en la funcion y luego 112233… borrando el 1.

var cosa = 1;

function f1 (){
    console.log(cosa)
}

f1();

cosa = 112233;

f1();

f

Yo soy experto en hacer crashear el navegador jaja 😥