根据谷歌的说法,V8采用了“停止世界,世代,精确,垃圾收集器”的高效垃圾收集。声明的一部分是V8在执行垃圾收集循环时停止程序执行。
一个显而易见的问题是,当您暂停程序执行时,如何才能拥有高效的GC?
我试图找到更多关于这个主题的信息,因为我有兴趣知道当你每秒有数十个thounsands请求触发node.js服务器时,GC会如何影响响应时间。
非常感谢任何专家帮助,个人经验或链接
谢谢
答案 0 :(得分:13)
“高效”可能意味着几件事。这里它可能指的是高吞吐量。在查看响应时间时,您对延迟更感兴趣,这确实比使用其他GC策略更糟糕。
阻止世界各地的GC的主要替代方案是
在面对并发修改堆时,两者都需要执行额外的工作才能正确(例如,如果创建新对象并将其附加到已扫描的对象,则必须注意此新引用)。这会影响总吞吐量,即实际清理整个堆需要更长的时间。好处是它们(通常)不会(通常)中断程序很长时间,如果有的话,所以延迟很低(呃)。
尽管V8文档仍然提到了一个世界级的收藏家,但自2011年以来它似乎是V8 GC is incremental。所以虽然偶尔会停止执行程序,但不会 2 停止程序,无论扫描整个堆多长时间。相反,它可以扫描几毫秒,然后让程序恢复。
1 “Mutator”是垃圾收集堆程序的GC术语。
2 至少在原则上,这可能是可配置的。