v8 :: Persistent MarkIndependent,这个方法究竟做了什么?

Kev*_*vin 12 c++ v8 embedded-v8

以下是v8代码评论,我不太明白解释.

/**
 * Marks the reference to this object independent. Garbage collector
 * is free to ignore any object groups containing this object.
 * Weak callback for an independent handle should not
 * assume that it will be preceded by a global GC prologue callback
 * or followed by a global GC epilogue callback.
 */
inline void MarkIndependent();
inline void MarkIndependent(Isolate* isolate);
Run Code Online (Sandbox Code Playgroud)

tbo*_*odt 1

来自v8-users 的帖子:

我认为“独立”的确切含义自 3.24 以来已经发生了一些变化。以下是我对最新版本 V8 中它的作用的理解:

  1. 它避免了对象组处理的成本。我们在 node.js 中不使用对象组,但我认为 chromium 可以用于 DOM 对象;如果集合中的一个 DOM 对象是活动的,那么逻辑上所有对象都是活动的。定义对象组可以让垃圾收集器走捷径,但每个单独的句柄会产生一些处理开销。

  2. 独立句柄可以在小型垃圾收集(清理)期间被回收。依赖句柄仅在主要收集期间被回收,因此保持活动时间更长,这通常是不可取的;我认为只有当它们指向的对象从新空间(托儿所)提升到旧空间时,它们才有资格被收集。