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); } }