gpt4 book ai didi

java - JVM 解释与 JIT 编译。 JVM 不将字节码编译为机器可读吗?

转载 作者:行者123 更新时间:2023-12-01 20:18:00 27 4
gpt4 key购买 nike

我有一个关于 JVM(Java 虚拟机)和 JIT(Just-in-Time)的问题。据我所知,JVM 将字节码(来自 .class 扩展文件)作为输入并解释该字节码。问题是:

  1. 当我们说解释时,是指将字节码翻译为机器可读代码(否则编译)?
  2. 那么,如果 JVM 将字节码“编译”为机器可读代码,而 JIT 执行基本相同的操作(将字节码转换为机器可读代码(否则进行编译)),那么使用 JIT 有何优势?

感谢您的回答。

最佳答案

When we say interpret, it's mean translation this bytecode to machine readable code(otherwise compiling)?

不,这意味着口译。想象一下在操作码本身上切换的巨大 switch 语句,其中每种情况都会从字节码中提取所需的操作数(如果有),然后直接执行实现每个操作码所需的代码。例如,考虑 iadd :

case IADD:
push(pop()+pop());
break;

So if JVM "compile" bytecode to machine readable code

事实并非如此。

and JIT do basically the same thing (converting bytecode to machine readable code (compiling otherwise)), what the advantages in using JIT?

首先,术语 JIT 从 Java 1.3 开始已过时。我们现在拥有的是 HotSpot JVM,它是一种高度优化的 JIT,它使用通常仅在高度优化的编译器中才能找到的技术,选择性地将字节代码中的热点转换为机器代码,而早期的 JIT (a) 是第三方产品,(b) 不加区别地为它遇到的任何字节代码散布机器代码。

其次,解释!=编译,如上所述。如果 HotSpot 注意到字节码的某个特定片段在大部分时间内正在执行,它会将其编译为机器代码,以便它可以直接执行而无需解释。

关于java - JVM 解释与 JIT 编译。 JVM 不将字节码编译为机器可读吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45427199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com