看起来我在我的代码中发现了内存泄漏,但我不确定,而且我没有很多关于nodejs内存泄漏的经验。
有人可以解释一下,这段代码会产生内存泄漏吗?
var tasks = [];
// each 10 seconds
tasks.push(function () {
console.log('hello, world!');
});
// each minute
while (tasks.length) {
var task = tasks.shift();
task();
}
UPD:错过了我的代码中的循环,现在更新。
我的问题是,我的匿名函数的范围是否会从内存中清除?
答案 0 :(得分:3)
嗯,不是内存泄漏,而是你在阵列中放置新元素的速度比检索它们快6倍。 因此,您实际上只使用了5个推送功能中的一个,并且您的阵列将继续增长。 如果你让它运行得足够长,你将会得到一个永远不会被清空的庞大数组。
编辑:添加while
循环后,阵列不再增长,并且不应该从代码的这一部分发生任何内存泄漏。这并不意味着您的项目中没有。确保在推送函数中创建的任何值都可以正确地进行垃圾收集(即,您没有在某处保留对它的引用)。