Node js堆检查器中的全局句柄和GC根是什么?

时间:2019-02-01 18:04:20

标签: node.js memory-management garbage-collection v8 node-inspector

我正在尝试检查正在运行的Express Node js应用程序的堆。

在堆转储比较中,看起来有些字符串没有被释放。 与它们相关的承诺已得到解决,但“保留者”链上升到“全局”句柄,然后上升到GC根。我没有遵循这些意思。

有人可以阐明这一点吗? 为什么GC无法收集这些已解决的承诺?

node js heap snapshot

1 个答案:

答案 0 :(得分:1)

节点保留对启用async_hooks时创建的每个promise的引用,以及对为了显示未处理的拒绝警告而已拒绝的promise的引用。

PromiseWrap是async_hooks使用的,而随机数组是未处理的拒绝跟踪使用的数组。

请注意,无法禁用未处理的拒绝跟踪:(,但是您可以放心,它们会以负责任的方式进行清理。