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)jvm
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是如何耗盡的,以及進入嵌套的層深。spa