Java无限递归和StackOverflowError

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,但我真的想无休止地运行它。有什么办法可以做到吗?

谢谢!

aio*_*obe 5

是的,也不是,(但大多不是!:)

不,这是不可能的(最明智的答案):
对于每个调用,都会有一个激活记录被推送到 JVM 调用堆栈上。这需要非零的内存量,因此您有时会耗尽内存,此时将抛出 StackOverflowException。

是的,这是可能的(超理论答案):
Java 语言规范中没有明确说明您最终应该遇到 StackOverflowException。这意味着,如果你找到一个足够强大的编译器,它可能足够智能,可以将其编译成循环


一个相关的问题是“JVM 是否支持尾部调用优化”。这个问题的答案是,“不,目前不会,但不排除未来版本”。