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) {
作为唯一的方法。