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

Segmentación RFM: cómo clasificar tu cartera de clientes antes de calcular el CLV

En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…

7 minutos ago

Los récords con asterisco, o la épica del titular sin contexto – El bestiario de los indicadores económicos absurdos (parte 8 y final)

Y llegamos al final de una serie que había programado para ser de tres entradas.…

5 días ago

PSI: Cómo Saber Cuándo tu Modelo de Credit Scoring se ha Degradado

Un modelo de credit scoring no es un artefacto estático. Se construye en un momento…

1 semana ago

Los indicadores que se autocumplen, o cuando medir es modificar – El bestiario de los indicadores económicos absurdos (parte 7)

En las seis entregas anteriores hemos paseado por casi todos los géneros del disparate económico:…

2 semanas ago

Customer Lifetime Value: la fórmula clásica que todo analista debería dominar

El Customer Lifetime Value (CLV) es, probablemente, la métrica más importante que puede calcular una…

2 semanas ago

Analytics Lane lanza la versión 1.4 del laboratorio con nuevas herramientas de conversión y modelos avanzados de CLV

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.4, que…

3 semanas ago

This website uses cookies.