![]() |
1
6
虽然不同(IL指令已经存在),但值得注意的是.NET 64 bit JIT team 必须通过检查才能尊重所有的追尾电话。 我特别提出了以下意见:
我认为JVM也不太可能避免这种情况。 鉴于此,在请求尾调用优化的情况下,JIT应该假定 必修的 为了避免堆栈溢出,这不是可以在调试版本中关闭的东西。如果它们在您进入感兴趣的部分之前崩溃,那么它们对调试没有太大的用处。“优化”实际上是一个永久性的特性,也是受其影响的堆栈跟踪的一个问题。
值得指出的是,在执行程序员概念上描述/理解为堆栈操作(例如调用函数)的操作时,任何避免创建实际堆栈帧的优化都会导致在调试/提供堆栈跟踪和rea时向用户呈现的内容之间的断开。能力。
|
![]() |
2
2
工作是 underway now 向JVM添加尾部调用。有一个 wiki page 谈论一些细节。 |
![]() |
3
0
是的,通常情况下,实现TCO会阻止您获得完整的堆栈跟踪。这是不可避免的,因为总体拥有成本的关键是避免创建额外的堆栈帧。 值得注意的是,Clojure有一个不消耗堆栈的“recur”特性来绕过当前JVM版本上的这个约束。 例子:
|
![]() |
Sam · jvm如何优化循环代码? 6 年前 |
![]() |
pushpavanthar · 纱线中的调谐火花作业 6 年前 |
![]() |
Ashish K · 在Groovy中将字符串参数传递给对象方法参数 6 年前 |
![]() |
St.Antario · 在Java中侦听多个目录以创建文件 6 年前 |
![]() |
Bonsaisteak · 为什么年轻一代需要三个区域来收集垃圾? 6 年前 |