JVM Exception in thread "main" java.lang.StackOverflowError


当你的程序报上面错误时,一般说明单个线程的栈大小不够了,不论是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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值