首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Node.js -超过最大调用堆栈大小

Node.js -超过最大调用堆栈大小
EN

Stack Overflow用户
提问于 2014-01-06 01:08:48
回答 4查看 173.8K关注 0票数 95

当我运行我的代码时,Node.js抛出了一个"RangeError: Maximum call stack size exceeded"异常,这是由过多的递归调用引起的。我试图通过sudo node --stack-size=16000 app来增加Node.js堆栈的大小,但是Node.js崩溃了,没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将打印'Segmentation fault: 11'。有没有可能在不删除递归调用的情况下解决这个问题?

EN

回答 4

Stack Overflow用户

发布于 2014-01-06 06:32:30

我找到了一个肮脏的解决方案:

代码语言:javascript
复制
/bin/bash -c "ulimit -s 65500; exec /usr/local/bin/node --stack-size=65500 /path/to/app.js"

它只会增加调用堆栈限制。我认为这不适合于产品代码,但我需要它用于只运行一次的脚本。

票数 33
EN

Stack Overflow用户

发布于 2014-01-06 01:29:40

在一些语言中,这可以通过尾部调用优化来解决,其中递归调用在幕后转换为循环,因此不存在最大堆栈大小达到的错误。

但是在javascript中,当前的引擎并不支持这一点,预计新版本的Ecmascript 6语言也会支持。

Node.js有一些启用ES6功能的标志,但尾部调用尚不可用。

因此,您可以重构代码以实现一种称为trampolining的技术,或重构以实现transform recursion into a loop

票数 9
EN

Stack Overflow用户

发布于 2014-12-05 18:52:55

如果你不想实现自己的包装器,你可以使用队列系统,例如async.queuequeue

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20936486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档