当前位置: 首页 > 知识库问答 >
问题:

如何增加最大调用堆栈大小Node.js

凤晨朗
2023-03-14

这与其他关于Node中错误消息的问题不同,错误消息中写着RangeError:超出最大调用堆栈大小,因为我确切地知道为什么会收到这条错误消息。它的发生是因为我在递归,事实上递归了很多次。

谢谢。

共有2个答案

庞安晏
2023-03-14

在节点版本5和6中,我已经验证了设置最大堆栈大小的选项是“--stack_size”(带下划线):

$  node --v8-options
[...]
--stack_size (default size of stack region v8 is allowed to use (in kBytes))
      type: int  default: 984

要增加最大堆栈大小,只需发出如下命令:

$ node --stack_size=1200

正如其他人所指出的,请注意增加此值可能会导致分段错误。版本6对我来说最大安全值是1361,但版本5似乎更高。

从大局来看,增加堆栈大小可能并不能解决所有问题。在节点中编写递归函数时,您最好的策略是以尾递归方式编写它们,因为版本6支持正确的尾调用。这将消除堆栈大小溢出。

殷承恩
2023-03-14

节点 --帮助

node --max-stack-size=val

更新:如注释所示,即使帮助文本仍然列出了--max-stack-size选项,但在节点v0.10. x中,您需要改用--stack-size

node --stack-size=val
 类似资料:
  • 问题内容: 这与有关Node中读取 RangeError 的错误消息的其他问题不同 :超出最大调用堆栈大小的 原因是我确切知道为什么收到此错误消息。之所以会这样,是因为我要递归,实际上递归很多。 谢谢。 问题答案: 来自: 更新:如注释所示,即使帮助文本仍列出了该选项,您也需要在节点v0.10.x中使用它。

  • 问题内容: 我问了这个问题,以了解如何增加JVM中的运行时调用堆栈大小。我有一个答案,而且我还有很多有用的答案和注释,这些注释和注释与Java如何处理需要大型运行时堆栈的情况有关。我在回答摘要中扩展了我的问题。 最初,我想增加JVM堆栈的大小,以便程序运行时无需安装。 相应的配置设置是具有足够大值的命令行标志。对于TT上面的程序,它可以与OpenJDK的JVM一起工作: 答案之一也指出这些-X…标

  • 问题内容: 当我运行我的代码时,Node.js引发由过多的递归调用引起的异常。我试图将Node.js堆栈大小增加,但是Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将输出。是否有可能在不删除递归调用的情况下解决此问题? 问题答案: 您应该将递归函数调用包装到 , 要么 函数使node.js有机会清除堆栈。如果您不这样做,并且有很多循环没有任何 真正的 异步

  • 问题内容: 我有一台服务器,可能导致以下输出死亡: 但是,如果没有堆栈转储或跟踪,就无法确定这是无限递归还是只是链太大而已,更不用说问题函数在哪里了。 使用该选项运行Node 不仅使我的测试运行缓慢(正如人们期望的那样),而且没有重现该问题。 有人有任何解决方案或提示来深入了解此问题吗? 问题答案: 看来目前的答案是:站稳脚步,等待Node.js更新到新的V8版本,或者使用此Chromium项目错

  • 问题内容: 我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 有人有主意吗? http://plnkr.co/edit/aNcBcU?p=预览 检查Chrome中的调试控制台(例如),您将看到错误。冒犯的行是 通过以下方式在控制器上对scope.map进行“ $ watched” 问题答案: 这是因为您要比较对象是否相等,而不是参考。将您的声明更改为此:

  • 如果用户未登录,我尝试将用户重定向到“TrapPage”。 这是我的代码: 当我将函数requireAuth放在onEnter上时,控制台给我一个错误: 我是一个反应迟钝的人,请耐心点:) 我的代码有什么问题?