我从这个帖子garbage collection with node.js中了解到node.js使用的是世代GC。
我经常使用循环对象引用(我删除/确保最终超出范围)并且想知道node.js是否处理好它们。所以对于例如。如果它是使用ref完成的。计数,会有问题,所以我想知道节点有多好。
一些使用场景:
对于每个http请求,我创建一个带有lambda的setTimeout,该lambda可能引用了scope对象。 scope对象还引用了超时对象等...
对于每个用户会话,我都有一个指针(仍在进行C编程)对http请求对象的引用,这些对象也引用了会话对象等...请求对象经常删除,但会话对象不是。
编辑:我问,因为我在网上发现了这个链接http://lifecs.likai.org/2010/02/how-generational-garbage-collector.html
答案 0 :(得分:10)
正如您所提到的,NodeJS使用世代GC ......特别是v8。因此,它不做引用计数类型GC。相反,它执行完整的标记和扫描类型GC。
因此,只要你摆脱对一组对象的所有引用(即使它们循环指向彼此),它们应该在某个时刻收集垃圾。
这并不意味着你不应该关心GC。如果你有一个非常活跃的NodeJS服务器,垃圾收集器将很难清理你的垃圾,特别是如果你有很多“中等寿命”的对象(即不是短期或长期)。
答案 1 :(得分:1)
请参阅IPNCode代码以获取引用计数示例 https://github.com/Frans-Willem/IPCNode