解释字节码与编译字节码?
问题内容:
我遇到了一些有关JVM /
JIT活动的参考,其中似乎在编译字节码和解释字节码之间有区别。该特定注释声明的字节码在前10000次运行时进行解释,然后进行编译。
“编译”和“解释”字节码之间有什么区别?
问题答案:
解释字节码基本上是逐行读取字节码,不进行任何优化或任何操作,然后对其进行解析并实时执行。由于许多原因,这种方法效率低下,其中包括Java字节码设计得不能快速解释的问题。
编译方法时,JIT会加载整个方法并生成直接在CPU上运行的本机代码,而不是逐行读取和解释字节码。编译该方法一次之后,每次调用该方法时都会直接使用生成的本机代码。这在天文速度上更快,但是在编译该方法时会产生一些开销。除其他外,JVM仅负责编译经常调用的方法,以最大程度地减少开销,同时最大程度地提高被频繁调用的“紧密内循环”代码的性能。