解释字节码与编译字节码?

use*_*112 8 java jit jvm jvm-hotspot

我遇到了一些关于JVM/JIT活动的参考文献,其中在编译字节码和解释字节码之间似乎有所区别.特定注释声明字节码被解释为前10000次运行并在此后编译.

"编译"和"解释"字节码有什么区别?

Lou*_*man 15

解释字节代码基本上逐行读取字节码,不做任何优化或任何事情,并解析它并实时执行它.出于多种原因,这显然是低效的,包括Java字节码不能被快速解释的问题.

编译方法时,JIT加载整个方法并生成本机代码以直接在CPU上运行,而不是逐行读取和解释字节代码.在编译该方法一次之后,每次调用该方法时都会直接使用生成的本机代码.这在天文学上更快,但在编译方法时会产生一些开销; 除此之外,JVM只负责编译经常调用的方法,以最大限度地减少开销,同时最大限度地提高经常被调用的"紧密内循环"代码的性能.

  • 不经常运行的代码实际上不会花费太多性能,编译代码所花费的时间可能比使用编译代码节省的时间要长.解释代码不会消耗新编译代码的内存,字节代码是跨平台可移植的,而编译代码则不是. (4认同)