【发布时间】:2011-10-24 00:40:00
【问题描述】:
我最近一直在研究具有 2000 个递归函数调用的深堆栈,想知道 Java 中堆栈中函数调用数量的限制是如何定义的?
【问题讨论】:
-
您是否考虑过将其重新设计为可迭代的?
标签: java jvm stack stack-size
我最近一直在研究具有 2000 个递归函数调用的深堆栈,想知道 Java 中堆栈中函数调用数量的限制是如何定义的?
【问题讨论】:
标签: java jvm stack stack-size
限制基于分配给每个线程的最大堆栈内存量。您可以使用 -Xss JVM 参数配置此限制。有关详细信息,请参阅以下链接:
【讨论】:
正如其他人所说,这取决于 JVM 可用的内存数量。
理论上你可以从内存中计算出函数调用的次数,if(这是一个很大的 if)你知道函数及其内存消耗。由于(未优化的)递归函数必须将所有局部变量和参数放在堆栈上,这非常依赖于函数。这意味着当您在堆栈上获得没有局部变量和一个 int 参数的 X 函数时,当您获得一个具有 2 个 int 参数和 2 个 int 局部变量的函数时,您只能获得 X/4(忽略其他堆栈帧开销,作为异常,返回地址,. ..)。
【讨论】: