关于java递归调用内存泄漏

发表于:2008-7-31 16:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
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<Integer>(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<Integer>(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.<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)



21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号