我最近一直在寻找带有2000个递归函数调用的深度堆栈,并且想知道如何在Java中的堆栈函数调用数量上定义限制?
答案 0 :(得分:5)
该限制基于分配给每个线程的最大堆栈内存量。您可以使用-Xss JVM参数配置此限制。有关详细信息,请参阅以下链接:
答案 1 :(得分:1)
正如其他人所说,它取决于JVM可用的内存数量。
理论上你可以从内存中计算出函数调用的次数, if (这是一个很大的if)你知道函数和它们的内存消耗。由于(未优化的)递归函数必须将所有本地和参数放在堆栈上,这非常依赖于函数。这意味着当你得到没有locals的X函数和堆栈上的一个int参数时,当你得到一个有2个int参数和2个int局部变量时,你只得到X / 4(忽略其他堆栈帧开销,例外,返回地址,。 ..)。