有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么Java递归调用不释放局部变量内存

我有一个递归方法,如下所示

private void foo(int i){
    byte[] a = new byte[1 * 1024 * 1024];
    System.out.println(i+" "+a.length);
    foo(i+1);
}

我发现局部变量a无法释放,如果我设置最大堆大小50M(-Xmx50M),它将在第44次调用时满足OOM

44 1048576
java.lang.OutOfMemoryError: Java heap space

但将其改为for loop,它没有这个问题

private void bar(){
    int index = 1;
    while (true) {
        byte[] a = new byte[1 * 1024 * 1024];
        System.out.println(index+" "+a.length);
        index += 1;
    }
}

那么为什么在递归中不释放局部变量的内存呢


共 (0) 个答案