我一直在研究Java JIT编译器,我无法弄清楚为什么仍然会解释一些代码。为什么JIT编译器不能将所有内容都转换为本机代码?解释要慢得多,我错过了什么?
答案 0 :(得分:5)
这都是权衡问题
答案 1 :(得分:3)
如果您正在运行像HotSpot这样的JVM,那么JIT会机会性地编译,只关注经常执行的代码。它通过计算每个代码块的频率(或方法 - 我不确定哪个)来确定要动态优化的代码。因此,在启动时,一切都被解释。
这背后的意图是允许更加激进和昂贵的优化,只需要优化一小部分代码。
答案 2 :(得分:2)
两个主要原因:
因此,Java JIT采取了一种合理的策略:在您观察到多次运行相同的代码之前不要编译,此时您有证据表明编译可能是值得的,并且您可以进行一些额外的操作的优化。