是否可以跳过 v8 GC 收集的对象?

Is it possible to skip an object from collecting by v8 GC?

我在内存中有很多长期存在的对象 (~10GB),我绝对知道这些对象永远不会被 GC 收集。问题是标记清除 gc 操作需要很长时间(90 秒)来检查内存中的所有对象及其关系。我需要一些方法来跳过收集我的对象。

我尝试使用 Persistent::MarkIndependent,但它对我不起作用。

如果有问题的对象是通过 C++ 句柄保持的引用,那么它们将不会被收集。但是,收集器仍然必须遍历它们,因为它必须找到对它们包含的其他对象的所有引用。如果它不这样做,那么您可能会得到悬空指针并导致 VM 崩溃。

所以,不,至少按照你描述的方式,这是不可能的。 (另一方面,如果这些对象不能包含随机指针,因为例如它们是数组缓冲区或字符串,那么 GC 知道它不需要遍历它们,因此不应该有性能问题。)