Node.js的垃圾收集器

9
我从这个帖子 garbage collection with node.js 中了解到node.js使用分代垃圾回收。
我经常使用循环对象引用(它们都会被删除/确保最终超出作用域),想知道node.js是否处理得好。例如,如果使用引用计数,就会有问题,所以我想知道node在这方面的表现如何。
一些使用场景:
  1. 对于每个http请求,我都会创建一个setTimeout和一个可能引用作用域对象的lambda表达式。作用域对象还引用了timeout对象等...

  2. 对于每个用户会话,我有一个指针(仍在进行C编程)引用到http请求对象,该对象还引用了会话对象等... 请求对象经常被删除,但会话对象没有。

编辑:我问这个问题是因为我在网上找到了这个链接 http://lifecs.likai.org/2010/02/how-generational-garbage-collector.html
2个回答

11
正如您所提到的,NodeJS使用一种名为v8的分代GC,因此它不会使用引用计数类型的GC,而是采用全面的标记和清除类型的GC。只要您消除了对一组对象的所有引用(即使它们循环地相互指向),它们应该在某个时刻被垃圾收集器回收。
这并不意味着您不需要关心GC。如果您有一个非常活跃的NodeJS服务器,垃圾收集器将非常努力地清理您的垃圾,尤其是如果您有大量的“中等寿命”对象(即不是短期或长期生存的)。

谢谢。你知道node.js(v8)的GC是在另一个线程中运行还是在同一个线程中(与js执行相同)?你有相关链接可以提供吗? - dhruvbird
同一个线程。这是一个停止世界的分代GC...但大多数其他GC也是如此。这里有一些信息(http://code.google.com/apis/v8/embed.html#handles),但对你可能没有用。如果你担心某些问题,你可能想先看看.NET或Java中人们使用的解决方案,它们在GC方面会类似。而且你总可以在stackoverflow上提出具体问题 :) - Amir

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接