对java内存泄漏的递归调用

时间:2011-09-13 08:41:09

标签: java

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)

3 个答案:

答案 0 :(得分:1)

如果无法看到您的代码,我可以建议您最有可能递归过深。

检查您的递归终止条件是否合理,以及您的起始条件是否合理。

基本上你把很多东西都推到了JVM放弃的堆上,然后在巴厘岛画海鸥。

答案 1 :(得分:1)

你可以猜到的问题是你有一个内存韭菜,因为堆已满。您可以通过增加Java堆空间来修复它,但问题可能与您的代码有关,这可能无法正确解除变量或您的递归函数没有“退出点”(检查迭代条件)

答案 2 :(得分:-1)

始终使程序中使用的arraylist和其他引用在finally块中为null。 省去了很多头痛:)

-Lav