为什么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) 个答案