JVM是否重新编译已编译的代码?

时间:2013-04-11 14:49:45

标签: jvm runtime jit

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

1 个答案:

答案 0 :(得分:1)

这取决于您重新编译的含义,但HotSpot VM会丢弃代码,这些代码在被证明是错误的或不再相关时依赖于乐观的假设。见deoptimization

  

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

第四点特别有趣:

  

如果加载的类使早期的类层次结构分析无效,则任何线程中的任何受影响的方法激活都会被强制转换为安全点并进行去优化。

这适用于this paper

中描述的乐观方法内联
  

类层次结构分析(CHA)是   用于检测当前只存在一种合适方法的虚拟呼叫站点。   然后乐观地内联这种方法。如果稍后加载了一个类,则会添加   另一种合适的方法,因此不再是乐观的假设   持有,该方法被去优化。