Внутреннее представление массива в v8 / node.js - PullRequest
2 голосов
/ 02 апреля 2012

Я написал небольшой тест памяти для node.js: http://pastebin.com/KfZ4Ucn4

Измеряет использование памяти, используя process.memoryUsage().heapUsed для 3 случаев:

  1. Массив объектов с 10 свойствами, разными именами свойств для каждого элемента
  2. Массив объектов с 10 свойствами, одинаковыми именами свойств
  3. Массив объектов с 10 свойствами, одинаковыми именами свойств, представленными как объект массивов

Издержки составляют 1300 байт для случая 1, 300 байт для случая 2 и 150 байт для случая 3. Также собирается только мусор из случая 1, в то время как в последних случаях использование памяти не снижается.

Есть ли какое-либо объяснение или документация для этих эффектов? Я пытаюсь оптимизировать использование памяти для массива объектов объектов, что-то вроде

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

Есть какие-нибудь подсказки?

1 Ответ

0 голосов
/ 03 апреля 2012

Я предполагаю, что это связано с тем, что V8 использует "скрытые классы" для представления похожих объектов, но то, что вы сообщаете, кажется довольно существенным отличием в следах ...

Вы можете прочитать больше о скрытых классах здесь: https://developers.google.com/v8/design, хотя эта статья, кажется, больше ориентирована на скорость, чем на использование памяти.

...