NodeJS 中的 GC 操作类型

gre*_*mer 1 javascript v8 node.js

通过使用perf_hooks我们可以获得一些关于 NodeJS 中垃圾收集的信息。PerformanceObserver我们可以像下面这样在每个垃圾收集(?)上使用哪个调用来使用它。

        const obs = new perf_hooks.PerformanceObserver(list => {
            console.log(list.getEntries()[0]);
        });
        obs.observe({ entryTypes: ['gc'] });
Run Code Online (Sandbox Code Playgroud)

这也是来自 console.log 的响应:

PerformanceEntry {
  name: 'gc',
  entryType: 'gc',
  startTime: 1150138386.4544,
  duration: 0.08009982109069824,
  detail: { kind: 4, flags: 0 }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试在网上查找有关detail.kind此回复内容的信息。有人可以向我解释它是什么吗?

我发现NodeJS中有四种gc:

perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR
perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR
perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL
perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB
Run Code Online (Sandbox Code Playgroud)

参考(https://nodejs.org/docs/latest-v16.x/api/perf_hooks.html#performanceentrykind

但这些类型的含义是什么?

谢谢你的帮助!

PS:duration确定操作执行了多长时间?

jmr*_*mrk 6

请参阅定义这些常量的源代码。

perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR

一个“主要”(=全堆标记-清除-紧凑)GC 周期(或更具体地说:结束时的原子暂停)。

perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR

“次要”(仅限年轻代,又名“清除”)GC 周期。

perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL

增量标记步骤。典型的主要 GC 周期在进入最后的原子暂停之前会执行数十或数百次此类操作。

perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB

调用弱句柄回调。

duration确定操作执行了多长时间?

是的,这就是“持续时间”一词的含义。