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