Java stackoverflower是使用正确的堆栈大小是什么?

时间:2017-05-03 06:01:16

标签: java eclipse stack-overflow

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

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

这就是我得到的:

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

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

这是什么意思?我怎样才能增加stacksize和我应该设置什么值?上述设置出现此错误是否正常?请帮忙。

2 个答案:

答案 0 :(得分:3)

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

除了修复代码之外,您无法做任何事情,这会导致此错误。

答案 1 :(得分:1)

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

java -Xss32m

通常1MB的堆栈大小就足够了。对于我工作的大多数项目,我很少需要更改堆栈大小。所以很可能你的代码不正确。