Java 中的 Tail Call Optimization
从Java 8开始,Java不提供尾调用优化(TCO)。在研究它时,我开始知道原因是:
在JDK类[...]中,有许多安全敏感方法依赖于计算JDK库代码之间的堆栈帧并调用代码来找出谁在调用它们。
然而,基于JVM的Scala支持尾部调用优化。Scala在编译时进行尾部递归优化。为什么Java不能使用相同的方法?
PS:不确定Java的最新版本(截至现在的Java 11)现在是否有TCO。如果一些知道的人也可以分享这一点,那就太好了。
笔记:
-
我知道TCO处于积压状态并且优先级较低,但想知道为什么Java不能在编译时进行类似于Scala的更改。
-
Java没有尾部调用优化,原因与大多数命令式语言没有的原因相同。命令式循环是该语言的首选风格,程序员可以用命令式循环替换尾递归。(来源)