为了估计递归方法在给定内存量下可以实现的最大调用深度,计算在可能发生堆栈溢出错误之前使用的内存的(近似)公式是什么?
编辑:
许多人用“它取决于”来回应,这是合理的,所以让我们通过一个微不足道但具体的例子来删除一些变量:
public static int sumOneToN(int n) {
return n < 2 ? 1 : n + sumOneToN(n - 1);
}
很容易证明,在我的 Eclipse IDE 中运行它会爆炸n
不到 1000(对我来说太低了)。是否可以在不执行的情况下估计此调用深度限制?
编辑:我不禁想到 Eclipse 有一个固定的最大调用深度 1000,因为我得到了998
,但是有一个用于主要的,一个用于对方法的初始调用,1000
总而言之。这是一个“太圆”的数字恕我直言,不是巧合。我会进一步调查。我刚刚 Dux 开销了 -Xss vm 参数;这是最大堆栈大小,所以 Eclipse 运行器必须-Xss1000
设置在某个地方