JVM是编译器还是解释器?

我有一个关于JVM的基本问题:是编译器还是解释器?

如果它是一个解释器,那么JVM中存在的JIT编译器呢?
如果两者都不,那么究竟是什么JVM? (我不希望将字节码转换为机器特定代码的jVM的基本定义等)

首先,让我们清楚地了解以下条款

Javac是Java编译器 – 将你的Java代码编译成Bytecode

JVM是Java虚拟机 – 运行/解释/翻译字节码为本地机器码

JIT即时编译器 – 在运行之前将给定的字节码指令序列编译为机器码,然后自然执行。 主要目的是在性能上做大量的优化。

所以,现在,让我们find你的问题的答案..

1) JVM: is it a compiler or an interpreter?答案:口译员

2) what about JIT compiler that exist inside the JVM?答:如果你完整地阅读了这个答案,你现在可能就知道了

3) what exactly is the JVM?答案:

  • JVM是驻留在RAM上的虚拟平台
  • 它的组件, Class loader.class文件加载到RAM中
  • JVM中的Byte code Verifier组件检查代码中是否存在任何访问限制违规。 (这是java安全的一个主要原因)
  • 接下来, 执行引擎组件将字节码转换为可执行的机器代码

希望这对你有帮助..

两者都有一点,但都不是传统意义上的。

现代JVM需要字节码,并在第一次需要时将其编译为本地代码。 这里的“JIT”代表“及时”。 它作为外部的解释器,但真正在编译成机器代码的幕后。

JVM不应与Java编译器混淆,它将源代码编译成字节码。 所以把它看作是一个“编译器”是没有用的,而是要知道在后台它会做一些编译。

这是两个。 它从解释字节码开始,可以(如果它决定它是值得的),然后将该字节码编译为本机机器码。

这是两个。 它可以解释字节码,并将其编译为本地代码。

就像评论部分已经提到的@delnan一样,它既不是

JVM是运行Java字节码的抽象机器。

JVM有几个实现:

  • HotSpot (解释器+ JIT编译器)
  • Dalvik (解释器+ JIT编译器)
  • ART ( AOT编译器+ JIT编译器)
  • GCJ (AOT编译器)
  • JamVM (翻译)

…和其他许多人 。

当谈到JVM时,大多数其他人都回答说要么使用HotSpot,要么将上述方法混合使用来实现JVM。

正如其他人所说,这是两个! 如果您想详细介绍它,则可以看到: 此IBM说明

JVM有编译器和解释器。 因为编译器编译代码并生成字节码。 之后,解释器将字节码转换为机器可理解的代码。

示例:编写和编译程序,并在Windows上运行。 将.class文件带到另一个操作系统(Unix),它将运行,因为解释器将字节码转换为机器可理解的代码。