Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我最近一直在寻找一个具有 2000 个递归函数调用的深堆栈,并且想知道 Java 堆栈中函数调用数量的限制是如何定义的?
该限制基于分配给每个线程的最大堆栈内存量。您可以使用 -Xss JVM 参数配置此限制。有关更多详细信息,请参阅这些链接:
热点常见问题
使用 Xss 调整 Java 默认线程堆栈大小
正如其他人所说,这取决于 JVM 可用的内存数量。
理论上,您可以从内存中计算出函数调用的数量,如果(这是一个很大的如果)您知道函数及其内存消耗。由于(未优化的)递归函数必须将所有局部变量和参数放在堆栈上,这非常依赖于函数。这意味着当您在堆栈上获得没有局部变量和一个 int 参数的 X 函数时,当您获得一个具有 2 个 int 参数和 2 个 int 局部变量的函数时,您只会得到 X/4(忽略其他堆栈帧开销,作为异常,返回地址,. ..)。