Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java递归函数中避免内存不足错误和清除堆_Java_Recursion_Heap_Heap Memory - Fatal编程技术网

java递归函数中避免内存不足错误和清除堆

java递归函数中避免内存不足错误和清除堆,java,recursion,heap,heap-memory,Java,Recursion,Heap,Heap Memory,我在java中有一个递归函数。目前,我在递归函数的某个点上通过生成一个异常来打破异常。 问题是我的堆溢出了。一旦我使用递归从递归函数中中断,是否仍有清除堆中未使用的变量的方法 public void recursivefun(int k) { int m=1; System.out.println("m is "+m); if (k>100) { throw new Exception(); } else { recursivefun(k+1); } Syst

我在java中有一个递归函数。目前,我在递归函数的某个点上通过生成一个异常来打破异常。 问题是我的堆溢出了。一旦我使用递归从递归函数中中断,是否仍有清除堆中未使用的变量的方法

public void recursivefun(int k)
{
 int m=1;
 System.out.println("m is "+m);
 if (k>100)
 {
  throw new Exception();
 }
 else
 {
  recursivefun(k+1);
  }
  System.out.println("after recursion");
}

我每次都从1开始。我不能使用return,因为我现在不想回到递归。我想打破完整的递归。

M和K是局部变量,M是未使用的。那么,您确定存在堆问题吗?你能公布K值吗?
public void recursivefun(int k)
{
 int m=1;
 System.out.println("m is "+m);
 if (k>100)
 {
  throw new Exception();
 }
 else
 {
  recursivefun(k+1);
  }
  System.out.println("after recursion");
}

尝试使用return退出

如果您使用的是类似于该代码的代码,则不应该是堆溢出,如果条件设置为大整数,则可能是堆栈溢出,因为在递归函数stack中,而不是堆,问题或代码不够清楚


但我建议在

上锁定也不错,为什么要抛出一个异常而不是仅仅调用return来退出递归呢?你到底想做什么?或者你正在抛出一个异常,作为一个断言?我只是通过抛出异常来打破整个递归。为什么不直接返回呢?你能发布完整的程序吗。你传递的k值是多少?