No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

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 鈥渆liminar鈥, 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 68

Preguntas 6

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

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

El algoritmo Mark & Sweep hace referencia a cuando un tipo de dato se vuelve inalcanzable para el programa.
Se toma una ra铆z la cual es el Objeto Global y a medida que el programa avanza, los objetos van creando o borrando referencias a sus ra铆ces.
Cuando un objeto se queda con 0 referencias, se dice que el objeto es inalcanzable y es aqu铆 cuando el Garbage Collector entra a hacer su trabajo (Liberar el espacio que usaban esas variables u objetos)
Desde 2012 los navegadores usan un Garbage Collector basado en este algoritmo, que ha ido recibiendo mejoras en su implementaci贸n constantemente.
Puedes ver m谩s informaci贸n acerca del algoritmo Mark & Sweep y de c贸mo hace JavaScript para gestionar su memoria en 茅ste enlace 馃槈

En lenguajes de alto nivel como Java y JavaScript, los programadores no necesitan asignar o liberar memoria expl铆citamente. La memoria JavaScript se asigna cuando se crean cosas (objetos, cadenas, etc.) y se libera autom谩ticamente cuando ya no se usan. Este proceso se llama Garbage Collection.

les dejo un enlace que explica muy bien estos temas 鉂わ笍

https://dev.to/abhilashiam/garbage-collection-in-javascript-126a

La referencia sutil/nada sutil a Stack Overflow xD

El concepto de Garbage Collector recuerdo que lo escuche por primera vez con JAVA y esto fue en mis tiempo de universitario el profesor nos comentaba que este funcionaba para evitar que la memoria se llenara con partes del codigo que no se utiliza , de hecho recuerdo que nos insistia mucho en que siempre que generaremos una clase utilizaremos un destructor, Veo que en JS este proceso es automatico ,actualmente no se como este en JAVA pero supongo que es o siempre fue autom谩tico.

Les comparto una lectura complementaria sobre este el tema
https://javascript.info/garbage-collection

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 鈥渄esechos鈥 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鈥ste 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 鈥渕emoria 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

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鈥檛 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 鈥渙verflow鈥, literally a massive storage of variables within the 鈥渕emory 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 鈥渦nsetear鈥 esos valores, algo genial es que, JavaScript tambi茅n tiene una palabra reservada llamada 鈥渄elete鈥 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?

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

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

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 鈥渁utom谩ticamente鈥 liberados cuando ya no son utilizados. El proceso anterior es conocido como Recolecci贸n de basura (garbage collection). Su forma 鈥渁utom谩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 鈥渞ecolector 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鈥檚 Memory Management Explained

Garbage collection: Proceso de rastrear 鈥渧ariables, 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 馃槬