当前位置: 首页 > 面试题库 >

Java 8是否具有尾部调用优化功能?

佟翰林
2023-03-14
问题内容

我尝试在网络上进行挖掘以使问题得到解答。我找到了一些与达芬奇计划有关的文件。这被标记为与在JVM中包含闭包有关的JSR
292。这个项目实现了吗,它是Java 8的一部分吗?


问题答案:

据我所知,Java 8没有尾调用优化。Afaik与实际的编译器技巧无关,因为它很简单,但是为了安全起见保留了一个调用栈。但是我想使用字节码重写器是可能的。



 类似资料:
  • 我有以下代码失败,错误如下: RuntimeError:超出最大递归深度 我试图重写它以允许尾部递归优化(TCO)。我相信,如果发生了TCO,那么这段代码应该是成功的。 我应该得出结论,Python不做任何类型的TCO,还是我只需要以不同的方式定义它?

  • 问题内容: 到目前为止,我一直喜欢JavaScript,并决定使用Node.js作为我的引擎,它声称Node.js提供了TCO。但是,当我尝试使用Node.js运行此(显然是尾部调用)代码时,会导致堆栈溢出: 现在,我做了一些挖掘,发现了这一点。在这里,看来我应该这样写: 但是,这给了我语法错误。我试过它的各种排列,但在所有的情况下,Node.js的似乎不满 的东西 。 本质上,我想了解以下内容:

  • 问题内容: 我有以下代码失败,并出现以下错误: 超过最大递归深度 我试图重写此代码以允许尾递归优化(TCO)。我相信,如果发生了TCO,则该代码应该会成功。 我是否应该得出结论,Python不执行任何类型的TCO,还是只需要以不同的方式定义它? 问题答案: 你可以通过这样的转换来手动消除递归

  • 问题内容: 特别是如果我有以下代码: Swift编译器会将其优化为循环吗?在下面更有趣的情况下会这样吗? 问题答案: 最好的检查方法是检查编译器生成的汇编语言代码。我将上面的代码编译为: 输出的相关部分 生成的代码中没有任何呼叫说明,只有条件跳转(/ / / )。显然,这表明Swift确实在 两种 情况下都进行了尾部调用优化。 此外,/ 函数很有趣,因为编译器不仅似乎在执行TCO,而且还在每种情况

  • 问题内容: 从Java 8开始,Java不提供尾叫优化(TCO)。经过研究,我知道原因是: 在JDK类中,有许多对安全性敏感的方法,它们依赖于对JDK库代码和调用代码之间的堆栈帧进行计数,以确定谁在调用它们。 但是,基于JVM的Scala支持尾叫优化。Scala在编译时进行尾递归优化。Java为什么不能使用相同的方法? PS:不确定Java的最新版本(截至现在的Java 11)是否具有TCO。如果