JavaScript

Truco: Forzar el recolector de basura en Node

En los programas con un gran consumo de memoria es posible que el recolector de basura entre a funcionar en el peor momento, produciendo que el programa se pueda parar temporalmente. Por eso, llamar al recolector de basura cuando no hay tareas puede aumentar el rendimiento. En JavaScript, a diferencia de otros lenguajes como R en los que existe la función gc(), no existe un método para llamar al recolector de basura directamente. Pero afortunadamente, sí que es posible forzar el recolector de basura en Node con un truco.

Forzar el recolector de basura en Node en un programa

Para poder llamar al recolector de basura en un programa de Node es necesario ejecutar este con la opción --expose-gc ya que esta no es una funcionalidad de JavaScript. Eso es, si se desea llamar al recolector de basura desde la aplicación app.js esta se debe de ejecutar de la siguiente manera

node --expose-gc app.js

Ahora dentro del programa, para instalar al recolector de basura se debe escribir el comando global.gc(). Lo que parará la ejecución del código para recuperar toda la memoria que ya no está en uso. El problema de este comando es que, en el caso de que no se incluya la opción --expose-gc producirá un error en tiempo de ejecución, por lo que es una buena idea comprobar si la función se encuentra disponible antes de llamarla escribiendo algo como if (global.gc) global.gc().

Si el programa lo van a lanzar otros usuarios puede ser una buena idea lanzar una advertencia indicando que no se puede realizar esta tarea para que lo inicie de forma adecuada. Lo que se puede conseguir con algo como:

if (global.gc) {
  global.gc();
} else {
  console.warn(`Para llamar al recolector de basura inicie el programa como 'node --expose-gc app.js'.`);
}

Conclusiones

En esta ocasión se ha visto un truco para llamar al recolector de basura en Node, algo que usado correctamente puede evitar más de un problema en los programas que requieren el uso de bastante memoria.

Imagen de Theodor Moise en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: NodeTruco

Recent Posts

Subplots en Matplotlib: cómo organizar múltiples gráficos en una sola figura

Llevas un rato analizando datos y tienes cuatro gráficos abiertos en ventanas separadas: ventas, usuarios,…

10 horas ago

Síndrome del objeto brillante en ciencia de datos: el error simétrico a los costes hundidos

Hace poco publiqué una entrada en la que trataba de un sesgo bien documentado: aferrarse…

5 días ago

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

1 semana ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

1 semana ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

2 semanas ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

2 semanas ago

This website uses cookies.