【问题标题】:understanding V8's heap information in nodejs在nodejs中理解V8的堆信息
【发布时间】:2020-01-03 12:02:53
【问题描述】:

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

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

]

还有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
}

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

【问题讨论】:

    标签: javascript node.js v8


    【解决方案1】:

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

    这里引用文章中的解释:

    New-space:大多数对象都分配在这里。新空间很小,旨在快速收集垃圾,独立于其他空间。

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

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

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

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

    Cell-space、property-cell-space 和 map-space:这些空间分别包含 Cells、PropertyCells 和 Maps。这些空间中的每一个都包含大小相同的对象,并且对它们指向的对象类型有一些限制,这简化了收集。

    v8.getHeapStatistics()中不同字段的含义在这里已经得到解答: nodejs v8.getHeapStatistics method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 2011-09-29
      • 2012-02-10
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      相关资源
      最近更新 更多