Java中如何定义堆栈中函数调用次数的限制?

发布于 2024-11-29 00:04:16 字数 66 浏览 2 评论 0原文

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

I've been looking recently on a deep stack with 2000 recursive function calls, and was wondering how is the limit defined on the number of function calls in the stack in Java?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

那请放手 2024-12-06 00:04:16

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

热点常见问题解答

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

The limit is based on the maximum amount of stack memory that is allocated to each thread. You can configure this limit using the -Xss JVM argument. See these links for more details:

Hotspot FAQ

Using Xss To Adjust Java Default Thread Stack Size

电影里的梦 2024-12-06 00:04:16

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

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

As the others say, it depends on the number of memory available to the JVM.

Theoretical you could compute from the memory the number of function calls, if (and this is a big if) you know the functions and their memory consumption. As a (unoptimized) recursive function has to place all locals and parameters on the stack this is very dependent on the the function. That means when you got X functions with no locals and one int parameter on the stack you get only X/4 when you got one with 2 int parameters and 2 int local variables (neglecting other stack frame overhead, as exception, return addresses, ...).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文