当你的程序报上面错误时,一般说明单个线程的栈大小不够了,不论是main线程还是其他子线程。可以调
高线程栈大小来解决该问题。不过在调高之前应先检查你的程序是不是有无限递归方法之类的情况。
在运行程序的参数里面加上:-Xss8m。代表将线程栈设置为8M,默认是1M。下面是我测试的不同栈大小
对应的大概递归次数。
public class TestJVMArgs {
static long methodNum = 0;
public static void testStackSize() throws InterruptedException {
methodNum++;
System.out.println(methodNum);
if (methodNum % 10 == 0) {
Thread.sleep(5);
}
testStackSize();
}
public static void main(String[] args) throws InterruptedException {
testStackSize(); // java.lang.StackOverflowError 与-Xss有关,ss越大,栈帧越多
}
}
线程栈大小 递归方法次数
-Xss128k 611
-Xss512k 2857
-Xss1024k 6020
-Xss2048k 15414
-Xss4096k 35414
-Xss8192k 69213