2011-03-16 211 views
7

我从这个线程garbage collection with node.js了解到,node.js使用分代GC。我常规使用循环对象引用(我最终删除/确保超出范围),并且想知道node.js是否处理得很好。因此,例如。如果它是使用ref完成的。计数,会有一个问题,所以我想知道节点在这方面有多好。Node.js的垃圾收集器

一些使用场景:

  1. 对于每一个http请求,创建与潜在地具有到范围的对象的引用的λ一个的setTimeout。范围对象也具有对超时对象,等等的引用...

  2. 对于每个用户会话,我有一个 指针 (还在做C编程)参照http请求对象也具有对引用会话对象等...请求对象经常被删除,但会话对象不是。

编辑:我想问,因为这个链接,我在网上找到http://lifecs.likai.org/2010/02/how-generational-garbage-collector.html

回答

10

正如你提到的,使用的NodeJS一个代GC ......特别v8的。因此,它不做引用计数类型的GC。相反,它做了一个完整的标记和扫描型GC。

所以,只要你摆脱了所有对一组对象的引用(即使它们循环指向另一个对象),它们也应该在某个时刻收集垃圾。

这并不意味着你不应该关心GC。如果你有一个非常活跃的NodeJS服务器,那么垃圾收集器将非常难以清理垃圾,特别是如果你有很多“中等寿命”对象(即不是短或长寿命)。

+0

由于见IPCNode代码。你知道node.js(v8)GC是在另一个线程还是在同一个线程上运行(和js执行一样)吗?你有相同的链接,我可以查找吗? – dhruvbird 2011-03-17 05:05:48

+0

同一线程。这是一个停止世界的代GC ...但其他大多数人也是如此。这里有一些信息(http://code.google.com/apis/v8/embed.html#handles),但它可能对您没有用处。如果您担心某些事情,您可能需要首先查看人们在.NET或Java中使用的解决方案,但他们在GC方面会有相似之处。你可以在stackoverflow上总是询问具体的问题:) – Amir 2011-03-17 05:23:48