这个简单的代码将 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 万个对象?