好的,我已经阅读了关于JIT和非JIT启用解释器之间差异以及为什么JIT通常提高性能的几篇讨论。
然而,我的问题是:
最终,非JIT启用的解释器难道不必将字节码(逐行)转换为机器/本地代码以执行,就像JIT编译器所做的那样吗?我看过一些帖子和教科书,它们说是这样的,也有一些帖子说不是。后者的观点是,解释器/JVM直接执行这个字节码,没有与机器/本地代码交互。
如果非JIT解释器确实将每行都转换为机器代码,那么JIT的主要优点似乎是...
缓存所有(普通JIT)或经常遇到的(热点/自适应优化)字节码部分的智能,以便不需要每次都进行机器代码编译步骤。
JIT编译器在将字节码转换为机器代码时可以执行的任何优化。
这是否准确?除了可能的优化或块与逐行JIT之外,在通过非JIT和JIT启用的解释器将字节码转换为机器代码方面似乎没有什么区别。
提前致谢。