了解nodejs中V8的堆信息

nmx*_*mxl 3 javascript v8 node.js

从文档中,v8.getHeapSpaceStatistics()返回类似这样的内容,

[
  {
    "space_name": "new_space",
    "space_size": 2063872,
    "space_used_size": 951112,
    "space_available_size": 80824,
    "physical_space_size": 2063872
  },
  ...

]
Run Code Online (Sandbox Code Playgroud)

还有v8.getHeapStatistics(),返回

{
  total_heap_size: 7326976,
  total_heap_size_executable: 4194304,
  total_physical_size: 7326976,
  total_available_size: 1152656,
  used_heap_size: 3476208,
  heap_size_limit: 1535115264,
  malloced_memory: 16384,
  peak_malloced_memory: 1127496,
  does_zap_garbage: 0,
  number_of_native_contexts: 1,
  number_of_detached_contexts: 0
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这些键和空格的实际含义吗?

Dan*_*rez 9

V8管理不同空间的堆,new_space用于快速垃圾收集的新对象,而old_space用于寿命较长的对象。v8.getHeapSpaceStatistics()返回有关不同空间的统计信息。本文对不同空间有更详细的解释:http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection

这里引用一下文章中的解释:

新空间:大多数对象都分配在这里。新空间很小,并且被设计为垃圾收集速度非常快,独立于其他空间。

旧指针空间:包含大多数可能具有指向其他对象的指针的对象。大多数对象在新空间中生存一段时间后都会被移动到这里。

旧数据空间:包含仅包含原始数据的对象(没有指向其他对象的指针)。字符串、装箱数字和未装箱双精度数组在新空间中存活一段时间后会移至此处。

大对象空间:该空间包含大于其他空间大小限制的对象。每个对象都有自己的 mmap 内存区域。垃圾收集器永远不会移动大对象。

代码空间:包含 JIT 指令的代码对象在这里分配。这是唯一具有可执行内存的空间(尽管代码可能分配在大对象空间中,并且它们也是可执行的)。

单元格空间、属性单元格空间和映射空间:这些空间分别包含单元格、属性单元格和映射。每个空间都包含大小相同的对象,并且对它们指向的对象类型有一些限制,这简化了收集。

v8.getHeapStatistics()这里已经回答了 不同字段的含义: nodejs v8.getHeapStatistics方法