1

JVM(其中任何一个)是否曾经重新编译已经在运行时编译的代码?

4

1 回答 1

1

这取决于您所说的重新编译是什么意思,但是当证明错误或不再相关时,HotSpot VM 将丢弃依赖于乐观假设的代码。见去优化

去优化是将优化的堆栈帧更改为未优化的堆栈帧的过程。对于编译方法,它也是丢弃具有无效乐观优化的代码,并用优化程度较低但更健壮的代码替换它的过程。

第四点特别有趣:

如果加载的类使早期的类层次结构分析无效,则任何线程中的任何受影响的方法激活都将被强制到安全点并取消优化。

这适用于本文所述的乐观方法内联:

类层次分析 (CHA) 用于检测当前仅存在一种合适方法的虚拟呼叫站点。然后乐观地内联此方法。如果稍后加载的类添加了另一个合适的方法,因此乐观假设不再成立,则该方法将被取消优化。

于 2013-04-12T10:38:40.140 回答