一尘不染

Node.js的垃圾收集器

node.js

我从带有node.js的线程垃圾收集中学到了node.js使用世代GC。

我通常使用循环对象引用(最终我都会删除/确保超出范围),并想知道node.js是否能很好地处理它们。所以例如。如果使用参考完成。计数,会有一个问题,所以我想知道这个节点有多好。

一些使用场景:

  1. 对于每个http请求,我创建一个带有lambda的setTimeout,该lambda可能引用了范围对象。作用域对象还引用了超时对象,等等。

  2. 对于每个用户会话,我都有一个 指向 http请求对象的 指针 (仍在进行C编程),该 指针 也具有对该会话对象的引用,等等。…请求对象经常被删除,而会话对象却没有。

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


阅读 226

收藏
2020-07-07

共1个答案

一尘不染

正如您提到的,NodeJS使用了世代GC
…特别是v8。因此,它不会引用计数类型GC。相反,它将执行完整的标记扫掠型GC。

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

这并不意味着您不应该关心GC。如果您有一个非常活跃的NodeJS服务器,则垃圾收集器将非常努力地清理垃圾,尤其是当您有许多“中等寿命”对象(即寿命不短或寿命长)时。

2020-07-07