java调用堆栈的最大深度是多less?

我得到StackOverflowError之前需要进入调用堆栈多深? 答案平台是否依赖?

这取决于分配给堆栈的虚拟内存的数量。

http://www.odi.ch/weblog/posting.php?posting=411

您可以使用-Xss VM参数或Thread(ThreadGroup, Runnable, String, long)构造函数对此进行调-Xss

我在我的系统上testing过,没有发现任何常数值,有时8900调用后有时会发生堆栈溢出,有时候只有7700后才会出现随机数。

 public class MainClass { private static long depth=0L; public static void main(String[] args){ deep(); } private static void deep(){ System.err.println(++depth); deep(); } } 

可以使用-Xss命令行开关设置堆栈大小,但根据经验,深度足够深,数百甚至数千个深度的调用。 (默认是平台依赖的,但在大多数平台上至less是256k)。

如果你得到一个堆栈溢出,99%的时间是由于代码错误造成的。

比较这两个电话:
(1)静态方法:

 public static void main(String[] args) { int i = 14400; while(true){ int myResult = testRecursion(i); System.out.println(myResult); i++; } } public static int testRecursion(int number) { if (number == 1) { return 1; } else { int result = 1 + testRecursion(number - 1); return result; } } //Exception in thread "main" java.lang.StackOverflowError after 62844 

(2)使用不同类的非静态方法:

 public static void main(String[] args) { int i = 14400; while(true){ TestRecursion tr = new TestRecursion (); int myResult = tr.testRecursion(i); System.out.println(myResult); i++; } } //Exception in thread "main" java.lang.StackOverflowError after 14002 

testingrecursion类有public int testRecursion(int number) {作为唯一的方法。