gpt4 book ai didi

java - Java中是否可以使用递归无限地运行程序?

转载 作者:行者123 更新时间:2023-12-01 18:44:51 24 4
gpt4 key购买 nike

我见过类似 for ( ; ; ) 的循环和while (true ) .

许多程序使用这种技术来无限地运行循环。是否可以使用递归来应用相同的技术?

最佳答案

没有。每一级递归都会将一个新帧放入堆栈中以供内部使用和局部变量。

随着深度的增加,您最终将到达专用于该堆栈的有限内存量的末尾。有一个shadow zone为最后一帧和任何 C++ 区域保留,因此命中该区域足以导致堆栈溢出。

Java methods generate code that checks that stack space is available a fixed distance towards the end of the stack so that the native code can be called without exceeding the stack space. This distance towards the end of the stack is called “Shadow Pages.” The size of the shadow pages is between 3 and 20 pages, depending on the platform. This distance is tunable, so that applications with native code needing more than the default distance can increase the shadow page size.

这在您输入 native 代码时使用,该代码无法可靠地检测堆栈末尾。如果堆栈上没有足够的空间用于任何递归或在 native 代码中进行的调用,则可能会发生真正的硬堆栈溢出,并带来严重后果。

请注意,Java执行尾递归优化,因此编译器不会将递归转换为迭代。

关于java - Java中是否可以使用递归无限地运行程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18235908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com