public class TailRecursionTest2 {
public static void main(String[] args) {
TailRecursionTest2 t = new TailRecursionTest2();
t.a(0);
}
public void a(int j) {
System.out.println(j);
j++;
if (j == 10000)
return;
List list = new Array List<Integer>(100000);
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.ArrayList. <init> (Unknown Source)
at TailRecursionTest2.a (TailRecursionTest2.java: 17)
at TailRecursionTest2.a (TailRecursionTest2.java: 20)
at TailRecursionTest2.a (TailRecursionTest2.java: 20)
at TailRecursionTest2.a (TailRecursionTest2.java: 20)
at TailRecursionTest2.a (TailRecursionTest2.java: 20)
答案 0 :(得分:1)
如果无法看到您的代码,我可以建议您最有可能递归过深。
检查您的递归终止条件是否合理,以及您的起始条件是否合理。
基本上你把很多东西都推到了JVM放弃的堆上,然后在巴厘岛画海鸥。
答案 1 :(得分:1)
你可以猜到的问题是你有一个内存韭菜,因为堆已满。您可以通过增加Java堆空间来修复它,但问题可能与您的代码有关,这可能无法正确解除变量或您的递归函数没有“退出点”(检查迭代条件)
答案 2 :(得分:-1)
始终使程序中使用的arraylist和其他引用在finally块中为null。 省去了很多头痛:)
-Lav