【问题标题】:Internal array representation in v8/node.jsv8/node.js 中的内部数组表示
【发布时间】:2012-04-02 13:58:47
【问题描述】:

我为 node.js 写了一个小内存基准测试:http://pastebin.com/KfZ4Ucn4

它使用process.memoryUsage().heapUsed 测量 3 种情况下的内存使用情况:

  1. 具有 10 个属性的对象数组,每个元素的属性名称不同
  2. 具有 10 个属性、相同属性名称的对象数组
  3. 具有 10 个属性、相同属性名称的对象数组,表示为数组对象

情况 1 的开销为 1300 字节,情况 2 为 300 字节,情况 3 为 150 字节。同样只有情况 1 的垃圾收集,而在后一种情况下,内存使用量不会下降。

对这些影响是否有任何解释或文档?我正在尝试优化对象数组的内存使用,例如

[ {
     foo : { bar : 1, baz : 2 }
  ,  bar : { bar : 2, baz : 7 }
  }
, {
     foo : { bar : 1, baz : 2 }
  ,  bar : { bar : 2, baz : 7 }
  } ]

有什么线索吗?

【问题讨论】:

    标签: node.js memory memory-management v8


    【解决方案1】:

    我猜这与 V8 使用“隐藏类”来表示相似对象的方式有关,但您所报告的似乎是足迹的巨大差异......

    您可以在此处阅读有关隐藏类的更多信息:https://developers.google.com/v8/design 尽管那篇文章似乎更关注速度而不是内存使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2013-10-16
      • 2016-07-24
      • 2012-02-27
      相关资源
      最近更新 更多