【问题标题】:Java stackoverflowerror what is the correct stack size to use?Java stackoverflowerror 使用的正确堆栈大小是多少?
【发布时间】:2017-09-30 19:40:54
【问题描述】:

我在运行递归程序时遇到了 Java StackOverFlowError。程序正确,需要实现递归。我尝试使用命令

查找当前堆栈大小
    java -XX:+PrintFlagsFinal -version | grep ThreadStackSize

这就是我得到的:

 intx CompilerThreadStackSize                   = 0                                   {pd product}
 intx ThreadStackSize                           = 1024                                {pd product}
 intx VMThreadStackSize                         = 1024                                {pd product}

java 版本“1.8.0_101” Java(TM) SE 运行时环境 (build 1.8.0_101-b13) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.101-b13,混合模式)

这是什么意思?以及如何增加堆栈大小以及我应该设置什么值?以上设置出现这个错误正常吗?请帮忙。

【问题讨论】:

标签: java eclipse stack-overflow


【解决方案1】:

这意味着堆栈大小为 1MB (1024KB)。并且您可以通过传递-Xss<size> 来增加线程堆栈大小,例如将每个线程的堆栈大小设置为 32 MB:

java -Xss32m

通常 1MB 的堆栈大小就足够了。对于我从事的大多数项目,我很少需要更改堆栈大小。所以很可能你的代码并不像你想象的那样正确。

【讨论】:

    【解决方案2】:

    如果您正在编写递归代码并且它没有终止递归的代码,那么无论您的堆栈大小有多高,您最终都会得到 stackoverflow 错误

    除了修复导致此错误的代码之外,您无能为力。

    【讨论】:

    • 您假设存在无限递归。情况可能并非如此(OP 写“程序是正确的”)。一些递归需要比默认可用的更多的堆栈。
    • @Henry,不是我写了infinte recursion它的用户 Harmlezz :)。
    • 不就是和“没有代码终止递归”一样吗?
    • @Henry Lol,你说得对:p,但是如果没有 OP 提供代码,我们不能说代码是正确的,尽管他声称它并且我至少在我的声明之前使用了 if:p。
    • 澄清一下,该程序没有无限递归,因为它适用于某些值。仅当递归次数增加时才会出现问题。很抱歉,我不能分享代码,因为它是机密的。
    猜你喜欢
    • 2019-10-20
    • 2015-10-06
    • 2021-12-15
    • 2015-01-02
    • 2014-01-11
    • 2021-12-05
    • 1970-01-01
    • 2014-03-06
    • 2012-09-19
    相关资源
    最近更新 更多