我有一个关于JVM非常基础的问题:它是一个编译器还是解释器?
如果它是一个解释器,那么JVM内部存在的JIT编译器是什么?
如果两者都不是,那么JVM到底是什么?(我不想要有关JVM将字节码转换为特定机器码的基本定义。)
我有一个关于JVM非常基础的问题:它是一个编译器还是解释器?
如果它是一个解释器,那么JVM内部存在的JIT编译器是什么?
如果两者都不是,那么JVM到底是什么?(我不想要有关JVM将字节码转换为特定机器码的基本定义。)
首先,让我们清楚以下几个术语:
Javac 是Java编译器 - 将您的Java代码编译为字节码
JVM 是Java虚拟机 - 运行/解释/将字节码转换为本地机器码
JIT 是即时编译器 - 在运行时将给定的字节码指令序列编译为机器码之前进行编译。它的主要目的是在性能方面做出大量优化。
现在,让我们找到您问题的答案:
JVM:它是编译器还是解释器?
一个解释器
JVM中存在的JIT编译器呢?
如果您完全阅读此回复,那么您现在可能已经知道了。
JVM究竟是什么?
.class
文件加载到RAM中这有点两者兼备,但不是传统意义上的。
现代JVM将字节码编译成本机代码,仅在需要时首次编译。在这种情况下,“JIT”代表“即时”。它从外部充当解释器,但实际上在幕后它正在编译成机器代码。
JVM不应与Java编译器混淆,后者将源代码编译成字节码。因此,将其视为“编译器”并没有多大用处,而是要知道它在后台确实进行了一些编译。
这是两者兼备的。它可以解释字节码,并将其编译为本地代码。