【问题标题】:How is the limit defined on the number of function calls in the stack in Java?Java中堆栈中函数调用次数的限制是如何定义的?
【发布时间】:2011-10-24 00:40:00
【问题描述】:

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

【问题讨论】:

  • 您是否考虑过将其重新设计为可迭代的?

标签: java jvm stack stack-size


【解决方案1】:

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

Hotspot FAQ

Using Xss To Adjust Java Default Thread Stack Size

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-25
      • 2017-03-16
      • 2013-01-30
      • 1970-01-01
      • 2017-07-18
      • 2021-05-25
      • 1970-01-01
      • 2018-05-08
      相关资源
      最近更新 更多