この単純なコードは、配列に 100 万個の文字列 (長さ 100 文字) を格納します。
function makestring(len) {
var s = '';
while (len--) s = s+'1';
return s;
}
var s = '';
var arr = [];
for (var i=0; i<1000000; i++) {
s = makestring(100);
arr.push(s);
if (i%1000 == 0) console.log(i+' - '+s);
}
実行すると、次のエラーが表示されます。
(...)
408000 - 1111111111111111111 (...)
409000 - 1111111111111111111 (...)
FATAL ERROR: JS Allocation failed - process out of memory
100 万 * 100 は 100 メガバイトです。
しかしs = makestring(100);
、ループの外側に移動すると...
var s = makestring(100);
var arr = [];
for (var i=0; i<1000000; i++) {
arr.push(s);
if (i%1000 == 0) {
console.log(i+' - '+s);
}
}
これはエラーなしで実行されます!
なんで?ノードに100万個のオブジェクトを保存するにはどうすればよいですか?