目录

  • 1.栈中可能出现的异常
  • 2.设置栈内存的大小 -Xss

 

1.栈中可能出现的异常

栈中可能出现的异常有StackOverflowError异常和OutOfMemoryError。

Java虚拟机规范允许Java栈的大小可以是动态的或者是固定不变的。

1.如果采用固定大小的java虚拟机栈,那每一个线程的java虚拟机栈的容量可以在线程创建的时候独立选定。如果线程请求分配的容量超过Java虚拟机栈允许的最大容量,java虚拟机将会抛出一个StackOverflowError异常。

2.如果虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,java虚拟机会抛出OOM异常。

java栈多大内存 java栈大小设置_栈内存


演示栈中的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

java栈多大内存 java栈大小设置_java虚拟机_02


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