nodejs内存不足

今天我遇到一个奇怪的问题。 这对其他人来说可能是一个简单的答案,但是却让我难住了。 为什么下面的代码会导致内存错误?

var cur = 167772160; var bcast = 184549375; var addresses = []; while (cur <= bcast){ cur += 1; addresses.push(cur); } addresses.length addresses // memory goes from a few megs to over a gig in seconds when trying to print this 

我得到这两个错误之一…第一次,当我在节点的解释器中运行此代码和后者时,我通过nodeunit运行它:

致命错误:CALL_AND_RETRY_2分配失败 – 进程内存不足

致命错误:JS分配失败 – 进程内存不足

当我尝试访问数组时,会发生这种情况。 但是得到的长度不。

 > var cur = 167772160; > var bcast = 184549375; > var addresses = []; > while (cur <= bcast){ ... cur += 1; ... addresses.push(cur); ... } 16777216 > addresses.length 16777216 > addresses FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory 

这里是另一个SO问题, Node.js(和chrome V8)中的内存限制与内存使用的问题有关。

您可以通过传递--max-old-space-size=<value> (以MB为单位)来增加默认限制。

该示例将允许节点的堆使用高达4GB(4096 兆字节 )的内存:

 node --max-old-space-size=4096 app 

运行脚本时,我没有收到内存分配错误。 你的系统有多less内存?

编辑确定作者的更新笔记,我可以复制它。

节点正试图将您的整个数组转换为一个string。 该arrays长16777216个元素。 每个元素包含一个至less9位数字的数字。 将其转换为长度为150,994,994个字符的string。 它只是一个超过节点内存容量的巨大操作。