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),它将运行,因为解释器将字节码转换为机器可理解的代码。