Java JIT 是否在同一台机器上每次运行时都使用相同的优化编译字节码?
它是否考虑了给定时刻的 CPU 使用率等动态因素,或者它每次都会进行相同的优化而不考虑临时因素?
Java JIT 是否在同一台机器上每次运行时都使用相同的优化编译字节码?
它是否考虑了给定时刻的 CPU 使用率等动态因素,或者它每次都会进行相同的优化而不考虑临时因素?
不,优化是不确定的。即使您运行完全相同的单线程、完全确定的程序,JIT 用来确定要优化哪些方法的采样器也可以选择不同的集合。
可以更改生成的机器代码的另一件事是代码引用的某些常量的实际内存位置。JIT 可以发出直接访问这些内存位置的机器指令,从而导致不同通道上的机器代码之间存在额外差异。
使用Jikes RVM的研究人员通过使用名为Compiler Replay的功能在他们的基准测试中解决了这个问题。