2015-05-29 3 views
23

Я использую узел v0.12.4. Когда я запускаю следующий код с node --max-old-space-size=8192 test.js он дает мне ошибку FATAL ERROR: invalid array length Allocation failed - process out of memorynode - недопустимая длина массива

var a = new Array(200000000); 
console.log(a.length); 

Однако если изменить размер, чтобы 300000000 я не получаю сообщение об ошибке. Что тут происходит? Есть ли аргумент командной строки, кроме --max-old-space-size Мне нужно изменить?

+0

Мое первое предположение заключалось в том, что первый размер был немного меньше самого большого 32-битного целого числа, а второй немного больше, но для него это слишком мало нулей. – Pointy

+0

Интересно, что я действительно не могу воссоздать это в v0.10. v0.11 segfaults. – fny

+1

Возможно, релевантно: [Node.js ограничение памяти для одного объекта] (http://stackoverflow.com/questions/25231808/node-js-heap-memory-limit-for-single-object) – jfriend00

ответ

6

размера кучи V8 ограничен до 1 Гб для 64-битных и 512 для 32-битной машины, но существуют объекты буфера в основном за пределами кучи. вы можете расширить использование памяти до 1,7 ГБ в 64-битной и ~ 1 ГБ на 32-битной машине. Вы можете попробовать это.

--max-old-space-size=3000 --trace-gc-verbose 

Вы можете распечатать трассировку, чтобы узнать об использовании памяти.