13.棧中可能出現的異常以及如何設置棧的大小

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

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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章