如何避免堆栈溢出错误

时间:2013-03-31 21:21:34

标签: java recurrence

我有一个可以定义为这样的程序

reset() {
   //sets all variables to initial values
   //clears all arrays
   method1();
}

method1 (){
    //doSomeStuff;
    method2();
}

method2(){
    //doStuff
    method3();
}

method3(){
    //doStuff
    if (jobDone) reset(); //here the cycle closes
    else method2();
}

所有这些方法都非常重要。 根据输入数据和结果,程序可能只执行几个周期并引发“堆栈溢出”错误。

我已经更改了VM标志-Xss(-Xss8M),但这并没有真正解决问题。

有没有办法让它几乎无限运作?

1 个答案:

答案 0 :(得分:2)

Luiggi Mendoza先前提到的解决方案:How to avoid stack overflow error

当你调用reset时,它调用method1,它调用method2,它调用method3并且它调用reset或method2都会导致递归中的无限循环。

你可能想要:

if (jobDone) return; // here the cycle realy closes

而不是

if (jobDone) reset(); //here the do _not_ close

如果你真的想要无限循环你的代码,这不会因为调用reset或methodi的方法而导致SO:

// assuming jobDone is actually a method, you might need this variable
boolean startReset = true;
while (true) {
        if (startReset) {
            //sets all variables to initial values
            //clears all arrays

            //doSomeStuff from method1;
        }
        //doStuff from method2

        //doStuff
        startReset = jobDone;
    }
}