我Map在Node.js v11.9.0 中制作了一个很大的内容并且它仍然失败了"致命错误:无效的表大小分配失败 -  JavaScript堆内存不足".我的地图的键和值不应该接近Node的堆大小,所以我尝试制作一个地图并在其中插入数字键和值:
var N = Math.pow(2, 26);
var map = new Map();
for (var i = 0; i < N; i++) {
  map.set(i, i + 1);
  if (i % 1e5 === 0) { console.log(i / 1e6); }
}
在插入大约1660万个条目后,该程序崩溃了Node.这个数字看起来很可疑接近2 ^ 24,所以替换上面的日志if (i > 16777200) { console.log(i); },我看到程序在成功打印"16777215"后立即崩溃,这比一个小于2 ^ 24.
题.Node中的条目数是否有文件限制Map接近2 ^ 24?有没有办法提高这个限制?
(NB运行节点node --max-old-space-size=4096不会阻止崩溃,因为Node使用的RAM远远小于4 GB.)
(注意2.我不认为这是一个哈希冲突问题,因为在我的实际代码中,地图包含(short-ish)字符串而不是数字.)
(注意3.在Firefox的JavaScript控制台中运行上述程序不会导致Firefox-Firefox不断添加条目超过3000万.但是,Chrome会像Node一样崩溃.所以这很可能是V8的限制.)