关于java递归调用内存泄漏

2008-07-31 11:27:41.0     浏览:662     来源:中国IT实验室
关键词:  java     内存  

看两段代码:


import java.util.ArrayList;
import java.util.List;

public class TailRecursionTest {
public static void main(String[] args) {
TailRecursionTest t = new TailRecursionTest();
for (int i = 0; i < 10000; i++)
t.a(0);
}

public void a(int j) {
j++;
List list = new ArrayList(100000);
// 对list进行处理
}
}

没啥特殊的,仅仅是为了测试,我们将a方法调用10000次,a方法创建一个有100000个元素的list的局部变量。
第二个程序:

import java.util.ArrayList;
import java.util.List;

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 ArrayList(100000);
// 对list进行处理
a(j);
}
}

也没啥特殊的,就是将循环换成了递归,a方法做的事情没变。两个都跑一下,程序1顺利结束,程序2出问题了,啥问题?如下:

161
162
163
164
165
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.ArrayList.(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)

[第1页]   [第2页]   [下一页]