I wrote a small program that creates arrays that work for quite some time (almost forever ;-)):
var results = []; var i = 1; while (true) { console.log(i++); results.push([]); }
When instead of an empty array I create a sparse array of length i , the program crashes pretty quickly:
var results = []; var i = 1; while (true) { console.log(i); results.push(new Array(i++)); }
Actually, I get to i equal to 17424, then I get an error message telling me
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory Abort trap: 6
and Node.js brings me back to the console. Since the only difference is that the second creates βlargerβ empty arrays than the first, this means that an empty sparse array of length n takes n times the space of an empty array of length 1 .
Am I right about this (in particular, Node.js)?
One more question: if I ran
var results = []; var i = 1; while (true) { console.log(i); var temp = []; temp[i++] = i; results.push(temp); }
then I get up to 1286175, then crash again:
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory Abort trap: 6
Why does this behave differently than the other two options?
PS: I use Node.js 0.12.0 to run this on OS X.