我正在尝试检查正在运行的Express Node.js应用程序的堆。 在堆转储比较中,看起来有些字符串没有被释放。它们绑定的承诺已经解决,但Retainers链向全局句柄,然后到GC根。我不明白这些是什么意思。 有人能够解释一下吗? 为什么GC无法收集这些已解决的承诺?
Node在启用async_hooks时会保存对每个Promise的引用,以及已拒绝的Promise,以便显示未处理的拒绝警告。PromiseWrap是async_hooks使用的内容,而那个随机数组是未处理拒绝跟踪使用的数组。请注意,无法禁用未处理拒绝跟踪 :(,但您可以放心,它们会被负责任地清理。