我在运行递归程序时遇到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和我应该设置什么值?上述设置出现此错误是否正常?请帮忙。
答案 0 :(得分:3)
如果您正在编写递归代码并且没有终止递归的代码,那么无论您的堆栈大小多高,您最终都会得到 stackoverflow错误。
除了修复代码之外,您无法做任何事情,这会导致此错误。
答案 1 :(得分:1)
这意味着堆栈大小为1MB(1024KB)。您可以通过传递-Xss<size>
来增加线程堆栈大小,例如将每个线程的堆栈大小设置为32 MB:
java -Xss32m
通常1MB的堆栈大小就足够了。对于我工作的大多数项目,我很少需要更改堆栈大小。所以很可能你的代码不正确。