Posted on 2011-08-18 02:11
匆匆過客 閱讀(22591)
評論(0) 編輯 收藏 所屬分類:
Java
Java程序中,每個線程都有自己的Stack Space。這個Stack Space不是來自Heap的分配。所以Stack Space的大小不會受到-Xmx和-Xms的影響,這2個JVM參數僅僅是影響Heap的大小。
Stack Space用來做方法的遞歸調用時壓入Stack Frame。所以當遞歸調用太深的時候,就有可能耗盡Stack Space,爆出StackOverflow的錯誤。Stack Space的大小隨著OS,JVM以及環境變量的大小而發生變化。一般說來默認的大小是512K。在64位的系統中,這個Stack Space值會更大。一般說來,Stack Space為128K是夠用的。這時你說需要做的就是觀察。如果你的程序沒有爆出StackOverflow的錯誤,可以使用-Xss來調整Stack Space的大小為128K。(eg:-Xss128K)
package org.thinking.jvm;
public class TestXSS {
private static long count = 0;
public static void main(String[] args) {
infinitelyRecursiveMethod(1);
}
public static void infinitelyRecursiveMethod(long a){
System.out.println(count++);
infinitelyRecursiveMethod(a);
}
}
通過上面的程序,你可以觀察到你的JVM Stack Space是如何耗盡的,以及進入嵌套的層深。