Java 因为我的JVM没有';不支持尾部调用优化,对吗?

Java 因为我的JVM没有';不支持尾部调用优化,对吗?,java,tail-recursion,stack-overflow,tail-call-optimization,Java,Tail Recursion,Stack Overflow,Tail Call Optimization,我在这个Java方法上得到了一个StackOverflowException: private static final Integer[] populate(final Integer[] array, final int length, final int current) { if (current == length) { return array; } else { array[current] = TR.random.nextInt(

我在这个Java方法上得到了一个
StackOverflowException

private static final Integer[] populate(final Integer[] array, final int length, final int current) {

    if (current == length) {
        return array;
    } else {
        array[current] = TR.random.nextInt();
        System.out.println(array[current]);
        return populate(array, length, current + 1);
    }
}
我在玩尾部调用递归,所以我猜当JVM没有正确短路堆栈时会发生这种情况?

我在java中找到了一个,因此我会检查这个(稍后有时间时)


尽管这对于您的用例来说非常不必要。

据我所知,没有任何JVM支持尾部调用优化。这不是疏忽。显然,这种优化对Java反射和Java安全管理器有重大影响

参考资料:

  • 作者:约翰·罗斯@甲骨文

是的,JVM目前不支持尾部调用优化,因为安全模型和始终需要有可用的堆栈跟踪,但这个示例可以使用迭代轻松重写。

普通Java没有尾部调用优化,AFAIK。Scala的实现确实有一定的局限性:

Hi,当然它可以用for循环轻松地表示出来。。。毕竟这是一种锻炼;)我不认为文件增加了太多。。。对尾部递归的引用没有提到是否优化了堆栈引用