多少个函数调用将导致堆栈溢出

Sna*_*ake 5 java error-handling android exception-handling

你好android/Java开发者,

当一个函数调用一个函数并且该函数调用另一个函数时,有多少调用(堆栈长度)会让我进入堆栈流量?有一般的经验法则吗?

我问的原因是因为我现在对于我的5玩家纸牌游戏来说效率更高(设计明智)

解决方案1:

for(int i=0;i<100;i++){
         p1.play();
         p2.play();
         p3.play();
         p4.play();
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:

   p1.play();    //where p1.play() calls p2.play() and so on until p4 calls p1 again.   
                 // this will go on for 100 times
Run Code Online (Sandbox Code Playgroud)

我更喜欢解决方案2,所以如果发生崩溃,我可以看到从i = 0的p1到i = 100的p4的所有函数调用

但是对于解决方案1,堆栈要短得多但是当发生崩溃时我会在循环的开头看到一个被调用的函数play(),其中发生了崩溃

你有什么建议?我知道它有点2个问题,但它们非常相关

谢谢你们

leo*_*loy 3

根据我的经验,Java 中的堆栈溢出几乎总是由于编程错误造成的。请参阅此处的典型尺寸。

现在,你的第二个解决方案是,IMO,相当丑陋......几乎是一个编程错误。假设 N=100 是(某种程度上)游戏的持续时间,那么内存消耗(堆栈大小)随之增加听起来是错误的。我根本不喜欢这个解决方案。

当发生崩溃时,我会在循环开始时看到崩溃发生的被调用函数 play()

我没有看到真正的优势。为什么不放置一个try catch块,以便在发生崩溃时可以打印出迭代编号?