3

我最近一直在寻找一个具有 2000 个递归函数调用的深堆栈,并且想知道 Java 堆栈中函数调用数量的限制是如何定义的?

4

2 回答 2

5

该限制基于分配给每个线程的最大堆栈内存量。您可以使用 -Xss JVM 参数配置此限制。有关更多详细信息,请参阅这些链接:

热点常见问题

使用 Xss 调整 Java 默认线程堆栈大小

于 2011-08-10T12:01:06.733 回答
1

正如其他人所说,这取决于 JVM 可用的内存数量。

理论上,您可以从内存中计算出函数调用的数量,如果(这是一个很大的如果)您知道函数及其内存消耗。由于(未优化的)递归函数必须将所有局部变量和参数放在堆栈上,这非常依赖于函数。这意味着当您在堆栈上获得没有局部变量和一个 int 参数的 X 函数时,当您获得一个具有 2 个 int 参数和 2 个 int 局部变量的函数时,您只会得到 X/4(忽略其他堆栈帧开销,作为异常,返回地址,. ..)。

于 2011-08-10T12:06:49.120 回答