sql >> Base de Datos >  >> NoSQL >> MongoDB

Eliminación de objetos Javascript grandes cuando el proceso se está quedando sin memoria

delete en javascript NO se usa para eliminar variables o liberar memoria. SOLO se usa para eliminar una propiedad de un objeto. Puede encontrar este artículo en el delete operador una buena lectura.

Puede eliminar una referencia a los datos contenidos en una variable estableciendo la variable en algo como null . Si no hay otras referencias a esos datos, entonces serán aptos para la recolección de elementos no utilizados. Si hay otras referencias a ese objeto, entonces no se borrará de la memoria hasta que no haya más referencias a él (por ejemplo, no hay forma de que su código llegue a él).

En cuanto a lo que está causando la acumulación de memoria, hay varias posibilidades y realmente no podemos ver lo suficiente de su código para saber qué referencias podrían retenerse para evitar que el GC libere cosas.

Si se trata de un proceso único de ejecución prolongada sin interrupciones en la ejecución, es posible que también deba ejecutar manualmente el recolector de basura para asegurarse de que tenga la oportunidad de limpiar las cosas que ha liberado.

Aquí hay un par de artículos sobre el seguimiento del uso de la memoria en node.js:http://dtrace.org/blogs/bmc/2012/05/05/debugging-node-js-memory-leaks/ y https://hacks.mozilla.org/2012/11/tracking-down-memory-leaks-in-node-js-a-node-js-holiday-temporada/ .