垃圾收集器在Node.js中

根据谷歌,V8采用了“停止世界,世代,准确,垃圾收集器”高效的垃圾收集。 声明的一部分是V8在执行垃圾回收循环时停止程序执行。

一个显而易见的问题是,如何在暂停程序执行时拥有高效的GC?

我试图find更多关于这个话题的信息,因为我有兴趣知道当你每秒发送几十个请求并触发你的node.js服务器时,GC如何影响响​​应时间。

任何专家的帮助,个人经验或链接将不胜感激

谢谢

“高效”可能意味着几件事情。 这里可能是指高吞吐量 。 在查看响应时间时,您对延迟更感兴趣,这可能确实比替代GC策略更糟糕。

停止世界的GC的主要select是

  • 增量GC,在暂时将控制交还给增变器1之前,不需要完成一个收集周期
  • (虚拟)与增变器同时操作的并发GC,只是非常短暂地中断它(例如扫描堆栈)。

在面对堆的并发修改时(例如,如果创build新的对象并将其附加到已扫描的对象,则必须注意这个新的引用),两者都需要执行额外的工作才是正确的。 这会影响总吞吐量,即实际清理整个堆会花费更长的时间。 好处是它们不会(通常)很长时间地中断程序,因此延迟很低(er)。

尽pipeV8文档中仍然提到了一个世界范围内的收集器,但从2011年开始, V8 GC似乎增量式的 。所以尽pipe它偶尔会停止执行程序,但是它不会停止程序,扫描整个堆。 相反,它可以扫描几毫秒,让程序恢复。

1 “Mutator”是垃圾收集程序的GC术语。

2至less在原则上,这可能是可configuration的。