首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的尾调用优化

Java中的尾调用优化
EN

Stack Overflow用户
提问于 2018-11-17 19:43:24
回答 2查看 19.6K关注 0票数 42

从Java 8开始,Java不提供尾叫优化(TCO).通过对它的研究,我了解了原因,即:

在JDK班..。有许多安全敏感的方法依赖于计算JDK库代码和调用代码之间的堆栈帧来确定谁在调用它们。

然而,基于JVM的Scala支持尾部调用优化。Scala在编译时进行尾递归优化。为什么Java不能使用相同的方法呢?

PS:不确定Java的最新版本(截至目前的Java 11 )是否有TCO。如果一些知道的人也能分享这一点,那就太好了。

备注:

  1. 我知道TCO处于待办状态,而且优先级较低,但我想知道为什么Java不能在编译时进行类似Scala的更改。
  2. Java没有尾调用优化,原因与大多数命令式语言没有相同的原因。命令式循环是语言的首选样式,程序员可以用命令式循环代替尾递归。(来源)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-17 19:50:12

为什么Java不能使用相同的方法呢?

我不能说将使用哪种方法,但在项目织机的建议中解释得更好

由于向JVM添加操作调用堆栈的能力无疑是必需的,这个项目的目标也是添加一个更轻量级的构造,允许将堆栈展开到某个点,然后调用带有给定参数的方法(基本上是高效尾调用的泛化)。我们将把这一特性称为展开和调用,即UAI。这个项目的目标不是为JVM添加一个自动的尾叫优化。

据我所知,关于尾叫的工作还没有开始,因为纤维和延续性目前似乎是一个更高的优先事项。

票数 21
EN

Stack Overflow用户

发布于 2018-12-14 23:00:29

我在这里读到了一篇关于如何在Java:Knoldus博客上关于Java尾部递归的文章中实现尾递归的非常好的博客文章。

但是,他们的博客上的代码没有编译,所以我用他们的代码创建了一个小回购,但是修改了语法,这样就可以编译了。带有工作代码的Github回购

希望这对某人有用,我发现在Knoldus博客文章中提出的想法非常有趣。

编辑:事实上,后来我发现博客文章中的观点最初是Venkat的,他在他的talk 这里中讨论了这些主题。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53354898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档