垃圾收集器中的Node.js(Garbage collector in Node.js)

2019-08-17 11:11发布

据谷歌称,V8采用了“停止这世界,代,准确,垃圾收集器”采用了高效的垃圾回收。 权利要求的部分是,V8执行垃圾收集周期时停止程序的执行。

一个明显的问题是,你怎么能当你暂停执行程序有一个高效的GC?

我试图找到更多关于这个话题,因为我很想知道如何做的GC的影响时,你有可能是每秒几十射击您的node.js服务器thounsands请求的响应时间。

任何专家的帮助下,亲身经历或链接将不胜感激

谢谢

Answer 1:

“高效”可能意味着几件事情。 这可能是指高吞吐量 。 当响应时间来看,你更感兴趣的延迟 ,这的确能比用其他GC策略更糟。

主要的替代品,停止这世界的GC是

  • 增量GCS,其不需要交还控制权交给突变1暂时结束之前收集周期,
  • 并发的GC 在同一时间作为增变哪个(虚拟地)进行操作,将其中断只有非常短暂地(例如以扫描栈)。

两者都需要进行额外的工作是在堆的并发修改面对正确的(例如,如果创建了一个新对象,并连接到一个已经扫描的对象,这种新的参考必须注意)。 这会影响总吞吐量,即它需要较长时间才能真正清洁整个堆。 有利的一面是,他们不(通常)中断程序很长,如果在所有,所以延迟低(更低)。

虽然V8文档仍然提到了停止的世界收藏家,似乎一个的V8 GC增量自2011年因此,尽管它在一段时间后停止执行程序,它不会停止2的程序但是需要多长时间扫描整个堆。 相反,它可以扫描,比方说,一对夫妇毫秒,让程序恢复。

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

2,至少在原则上,这可能是可配置的。



文章来源: Garbage collector in Node.js