我有一个可以定义为这样的程序
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
),但这并没有真正解决问题。
有没有办法让它几乎无限运作?
答案 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;
}
}