chapter | pageNumber | description |
---|---|---|
27 |
315 |
Comprender el montón de memoria en JavaScript. |
En JavaScript, la gestión de la memoria es fundamental para garantizar un rendimiento eficiente y sin problemas de las aplicaciones. El montón de memoria es una región de la memoria donde se almacenan objetos, cadenas y cierres. Lo gestiona el recolector de elementos no utilizados del motor de JavaScript.
El montón de memoria es un área de memoria de computadora reservada previamente que un programa puede usar para almacenar datos en una cantidad variable. A diferencia de la pila, que se usa para la asignación de memoria estática, el montón se usa para la asignación de memoria dinámica.
Cuando creas objetos o variables en JavaScript, estos se asignan en el montón de memoria. El recolector de elementos no utilizados del motor de JavaScript escanea periódicamente el montón para identificar y recuperar la memoria que ya no se utiliza.
A continuación se muestra un ejemplo para ilustrar cómo se asigna la memoria en el montón:
let obj = {
name: "John",
age: 30
};
let arr = [1, 2, 3, 4, 5];
En este ejemplo, el objeto obj
y la matriz arr
se asignan en el montón de memoria.
JavaScript utiliza un mecanismo automático de recolección de basura para administrar la memoria. El recolector de basura identifica los objetos que ya no son accesibles y recupera su memoria.
Consideremos el siguiente ejemplo:
function createUser() {
let user = {
name: "Alice",
age: 25
};
return user;
}
let user1 = createUser();
let user2 = createUser();
user1 = null; // El objeto al que hace referencia el user1 ahora es elegible para la recolección de basura
En este ejemplo, cuando user1
se establece en null
, el objeto al que hace referencia se vuelve elegible para la recolección de basura porque ya no es accesible.
Las fugas de memoria se producen cuando no se libera la memoria que ya no se necesita. Esto puede suceder si se conservan referencias a objetos de forma no intencionada.
He aquí un ejemplo de una pérdida de memoria:
let arr = [];
function addElement() {
arr.push(new Array(1000000).join('x'));
}
setInterval(addElement, 1000); // Esto provocará una pérdida de memoria a medida que la matriz sigue creciendo.
En este ejemplo, la matriz arr
sigue creciendo porque continuamente se agregan nuevos elementos sin eliminarlos, lo que genera una pérdida de memoria.
- Evitar variables globales: Minimizar el uso de variables globales para reducir el riesgo de fugas de memoria.
- Usar
let
yconst
: Preferirlet
yconst
en lugar devar
para limitar el alcance de las variables. - Limpiar referencias: Establecer explícitamente las referencias en
null
cuando ya no sean necesarias. - Usar cierres con prudencia: Tener cuidado con los cierres, ya que pueden retener referencias a variables externas.
Comprender cómo funciona el montón de memoria en JavaScript es fundamental para escribir código eficiente y de alto rendimiento. Si sigue las prácticas recomendadas y tiene en cuenta la asignación de memoria y la recolección de elementos no utilizados, puede evitar problemas comunes, como las fugas de memoria.