2016-12-23 3 views
0

Я использую Node.js. У меня есть следующий код javascript.Массив не более 7741 элементов в JavaScript

var length=9980; 
this.distance= [];//hold distance 
this.cost= []; //hold time cost 

console.log("before create distance and cost arrays"); 
console.log("length" + length); 
for(var i=0; i < length;i++) 
{ 
    console.log("creating cost : " + i);  
    this.distance[i] = new Array(length); 
    this.cost[i] = new Array(length); 
}; 

К этому, я хочу создать 2 размер массива

distance, cost 

, как показано выше.

Проблема возникает ошибка.

enter image description here

Массив должен быть в состоянии держать миллионы элементов, но есть такая ошибка.

В чем проблема? Как я могу заставить его работать?

+1

Возможно, такая же проблема: http://stackoverflow.com/questions/38558989/node-js-heap-out-of-memory – pL4Gu33

+0

Alim, я замечаю, что вы обычно добавляете «пожалуйста, помогите» на ваши вопросы. Дополнения такого рода не дают ответов на вопросы с большей вероятностью, и их можно интерпретировать как форму попрошайничества. Пожалуйста, воздержитесь от срочной просьбы - это неприемлемо при обращении к добровольцам. Спасибо! – halfer

+0

Он уже находится как минимум на '2 * (9,980 + 1) * 7,740 = 154,505,880' элементах массива. Это * миллионы. Только эти два массива занимают около 312 МБ в Firefox. – Robert

ответ

3

Я думаю, что вы используете ограничения памяти по умолчанию для узла.

Попробуйте добавить запуск приложения-узла с помощью флага -max_old_space_size =.

node --max_old_space_size=4096 app.js 

Согласно http://prestonparry.com/articles/IncreaseNodeJSMemorySize/ число в мегабайтах так что это должно дать вам колпачок памяти 4 Гб.

+0

На самом деле, я пробовал это и не работал (даже я установил размер как 10000). массив [9800] [9800] может быть большим. Похоже, я должен удалить эти массивы и выяснить, какой способ использует меньше памяти. – arslan

+2

Проблема, с которой вы сталкиваетесь, вероятно, связана с тем, что вы создаете двухмерный массив. Если вы можете сделать эту работу в плоском одномерном массиве, вам станет лучше. Массив массивов будет использовать огромный объем памяти. Для каждого из этих элементов массива 9980 вы создаете два дополнительных массива 9980 с элементами, и это кажется немного чрезмерным. По возможности попробуйте обработать все это в одном массиве или в одном объекте. – jaggedsoft

Смежные вопросы