13.JVM栈中可能出现的异常以及如何设置栈的大小

 

1.栈中可能出现的异常

栈中可能出现的异常有StackOverflowError异常和OutOfMemoryError。
Java虚拟机规范允许Java栈的大小可以是动态的或者是固定不变的。
1.如果采用固定大小的java虚拟机栈,那每一个线程的java虚拟机栈的容量可以在线程创建的时候独立选定。如果线程请求分配的容量超过Java虚拟机栈允许的最大容量,java虚拟机将会抛出一个StackOverflowError异常。
2.如果虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,java虚拟机会抛出OOM异常。
在这里插入图片描述
演示栈中的StackOverflowError异常:递归调用。

/**
 * 演示栈中的异常:StackOverflowError
 */
public class StackErrorTest {
    public static void main(String[] args) {
        main(args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.设置栈内存的大小 -Xss

使用-Xss设置栈内存的大小。
例子:
-Xss1024k // 设置栈的大小为1024k
-Xss1m // 设置栈的大小为1M
在这里插入图片描述
演示-Xss设置栈的大小之后的区别:

public class StackErrorTest {
    private static int count = 1;
    public static void main(String[] args) {
        System.out.println(count);  //默认情况下:count输出为11420; 当设置设置栈的大小: -Xss256k 之后 count输出为2465
        count++;
        main(args);
    }
}

 

posted @ 2020-11-18 10:24  跃小云  阅读(415)  评论(0编辑  收藏  举报