Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点内存不足_Javascript_Node.js_V8 - Fatal编程技术网

Javascript 节点内存不足

Javascript 节点内存不足,javascript,node.js,v8,Javascript,Node.js,V8,我今天遇到了一个奇怪的问题。对于其他人来说,这可能是一个简单的答案,但它让我感到困惑。为什么下面的代码会导致内存错误 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 ove

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

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
var cur=167772160;
var bcast=184549375;
var地址=[];

而(cur我在运行您的脚本时没有收到内存分配错误。您的系统上有多少RAM

编辑 好的,有了作者更新的笔记,我可以复制它


Node正在尝试将整个数组转换为字符串。数组长度为16777216个元素。每个元素至少包含9位数字。将其转换为字符串长度为150994994个字符。这只是一个巨大的操作,超出了Node的内存容量。

当我尝试访问数组时会发生这种情况。 但获取长度并不重要

> 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
>var cur=167772160;
>var bcast=184549375;
>var地址=[];
>while(cur addresses.length
16777216
>地址
致命错误:调用和重试分配失败-进程内存不足

这里还有一个SO问题,与内存使用问题有关。

您可以通过传递
--max old space size=
来增加默认限制,该值以MB为单位

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

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

4 GB,macbook air。请确保访问address.length属性。这就是它在我的上崩溃的地方。我会添加它。我忘了提到那个部分。我的设置也很好。它应该是
地址。长度
?是的。输入错误。我刚看了活动监视器。如果你只是键入“地址”让它尝试打印出阵列,节点的内存使用量在几秒钟内从几乎为零变为超过一个gig,然后消失(Sadness您运行的是哪个版本的node?我使用的是0.4.8。我开始认为是toString或valueOf方法导致了此崩溃。我在v8列表中发布了一个问题,值得一看。如果只有node支持yield关键字,我就不会编写这样的代码。我必须看看是否可以创建递归fu一个类似于生成器的回调操作。这样就不需要创建一个包含所有这些值的数组了b/c我可以在程序的另一部分逐个处理它们。好的,所以我不是唯一的一个。嗯。也许我应该把它放到nodejs github问题列表中。是的,我看到了这样的问题在前面,但我不认为这只是节点。我可以崩溃谷歌铬以及运行该代码。唉。啊,谷歌铬也使用相同的v8引擎使用node.js。让我看看另一个实现,因为存储16777216个9位整数真的需要大量内存。对于那些感兴趣的人,我切换到使用缓冲区。有限的成功。4 GBs实际上是4096,我试图编辑您的答案,但更改少于6个字符。