【发布时间】:2018-01-12 15:01:50
【问题描述】:
我在内存中有很多长寿命的对象(~10GB),我绝对知道这些对象永远不会被 GC 收集。问题是标记-扫描 gc 操作需要很长时间(90 秒)来检查内存中的所有对象及其关系。我需要一些方法来跳过收集我的对象。
我尝试使用Persistent::MarkIndependent,但它对我不起作用。
【问题讨论】:
标签: node.js v8 node.js-addon embedded-v8
我在内存中有很多长寿命的对象(~10GB),我绝对知道这些对象永远不会被 GC 收集。问题是标记-扫描 gc 操作需要很长时间(90 秒)来检查内存中的所有对象及其关系。我需要一些方法来跳过收集我的对象。
我尝试使用Persistent::MarkIndependent,但它对我不起作用。
【问题讨论】:
标签: node.js v8 node.js-addon embedded-v8
如果有问题的对象是通过 C++ 的句柄保持的引用,那么它们将不会被收集。但是,收集器仍然必须遍历它们,因为它必须找到对它们包含的其他对象的所有引用。如果它不这样做,那么您可能会得到悬空指针并导致 VM 崩溃。
所以,不,至少按照你描述的方式,这是做不到的。 (另一方面,如果这些对象不能包含随机指针,因为它们是数组缓冲区或字符串,那么 GC 知道它不需要遍历它们,因此不应该存在性能问题。)
【讨论】: