【问题标题】:Avoiding out of memory error and clearing heap in java recursive functionsjava递归函数中避免内存不足错误和清除堆
【发布时间】:2016-02-25 04:26:43
【问题描述】:

我在 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");
}

我每次 k 从 1 开始。我不能使用 return,因为此时我不想回到递归。我想打破完全递归。

【问题讨论】:

  • 为什么要抛出异常而不是仅仅调用 return 来退出递归呢?你真正想做什么?
  • 或者你是抛出异常,作为 assert ?
  • 我只是通过抛出异常来打破整个递归。
  • 为什么不直接return?
  • 你能发布完整的程序吗?你传递的 k 值是多少?

标签: java recursion heap-memory


【解决方案1】:

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

但我建议锁定enter link description here也不错

【讨论】:

    【解决方案2】:

    M 和 K 是局部变量,M 未使用。那么,您确定存在堆问题吗?能贴出K值吗? 尝试使用 return 退出。

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      相关资源
      最近更新 更多