Java JIT是否确定性地编译字节码 - 对同一台机器上的每次运行进行相同的优化?

Rad*_*cea 6 java optimization jit jvm-hotspot

Java JIT是否在同一台机器上的每次运行中使用相同的优化编译字节码?

是否考虑了特定时刻的CPU使用率等动态因素,或者无论临时因素如何,它都会每次进行相同的优化?

Sam*_*ell 5

不,优化是不确定的。即使您运行完全相同的单线程、完全确定性程序,JIT 用于确定要优化哪些方法的采样器也可以选择不同的集合。

可以更改生成的机器代码的另一件事是代码引用的某些常量的实际内存位置。JIT 可以发出直接访问这些内存位置的机器指令,从而导致不同遍上的机器代码之间存在额外差异。

使用Jikes RVM 的研究人员通过使用称为Compiler Replay的功能为他们的基准测试解决了这个问题。