nodejs内存不足

Sne*_*bat 29 javascript v8 node.js

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

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
Run Code Online (Sandbox Code Playgroud)

我得到了这两个错误中的一个......第一个是我在node的解释器中运行这个代码而后者是我在nodeunit中运行它时:

致命错误:CALL_AND_RETRY_2分配失败 - 处理内存不足

致命错误:JS分配失败 - 处理内存不足

Sah*_*eed 24

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

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

node --max-old-space-size=4096 app
Run Code Online (Sandbox Code Playgroud)

  • 4 GB实际上是4096,我试着编辑你的答案,但变化少于6个字符. (5认同)

ace*_*ace 7

当我尝试访问数组时会发生这种情况.但是获得长度却没有.

> 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
Run Code Online (Sandbox Code Playgroud)

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