ros*_*osx 3 java stack-overflow recursion
抱歉,我的问题可能很愚蠢,我是 Java 新手。
有没有一种方法可以在Java中进行无限递归,例如:
public void sillyMethod()
{
System.out.println(i);
i++;
sillyMethod();
}
Run Code Online (Sandbox Code Playgroud)
它抛出 StackOverflowError,但我真的想无休止地运行它。有什么办法可以做到吗?
谢谢!
是的,也不是,(但大多不是!:)
不,这是不可能的(最明智的答案):
对于每个调用,都会有一个激活记录被推送到 JVM 调用堆栈上。这需要非零的内存量,因此您有时会耗尽内存,此时将抛出 StackOverflowException。
是的,这是可能的(超理论答案):
Java 语言规范中没有明确说明您最终应该遇到 StackOverflowException。这意味着,如果你找到一个足够强大的编译器,它可能足够智能,可以将其编译成循环。
一个相关的问题是“JVM 是否支持尾部调用优化”。这个问题的答案是,“不,目前不会,但不排除未来版本”。