我们知道node.js为我们提供了强大的功能,但强大的功能带来了巨大的责任。

据我所知,V8引擎不进行任何垃圾收集。因此,我们应该避免哪些最常见的错误,以确保没有内存从节点服务器泄漏。

编辑:
对不起,很抱歉,V8确实具有强大的垃圾收集器。

最佳答案



V8内置了功能强大且智能的垃圾收集器。

您的主要问题是不了解闭包如何维护对外部函数的范围和上下文的引用。这意味着您可以通过多种方式创建循环引用或以其他方式创建无法清除的变量。

这是因为您的代码含糊不清,并且编译器无法判断垃圾回收是否安全。

强制GC拾取数据的一种方法是使变量为空。

function(foo, cb) {
    var bigObject = new BigObject();
    doFoo(foo).on("change", function(e) {
         if (e.type === bigObject.type) {
              cb();
              // bigObject = null;
         }
    });
}

v8如何知道在事件处理程序中对大型对象进行垃圾回收是否安全?并不是这样,您需要通过将变量设置为null来告诉它不再使用。

阅读各种文章:
  • http://www.ibm.com/developerworks/web/library/wa-memleak/
  • 09-30 22:53