8

我遇到了一些关于 JVM/JIT 活动的参考资料,其中编译字节码和解释字节码之间似乎存在区别。特定注释说明的字节码在前 10000 次运行中被解释,然后被编译。

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

4

3 回答 3

14

解释字节码基本上是逐行读取字节码,不做优化什么的,实时解析执行。由于多种原因,这明显是低效的,包括 Java 字节码不是为快速解释而设计的问题。

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

于 2012-04-21T23:01:44.340 回答
3

当字节码被插入时,它是通过 JVM 解释器执行的,而不是直接在处理器上执行,当它被编译时,它被编译成本地机器语言并直接在 CPU 上执行。

于 2012-04-21T23:01:00.067 回答
1

JVM 有 Just In Time(JIT 编译器);重复的部分代码可能会被编译成本地汇编代码以加快速度。

请注意,更改仅在 JVM 中完成,类​​(jar/war)文件不会更改并保留为字节码。

于 2012-04-21T23:01:53.000 回答