JVM 是编译器还是解释器?

2022-08-31 11:41:06

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

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


答案 1

首先,让我们清楚地了解以下术语

Javac是 Java 编译器 -- 将 Java 代码编译为字节码

JVM是 Java 虚拟机 -- 运行/解释/转换字节码到本机机器代码

JIT是 Just In Time Compiler -- 在运行时将给定的字节码指令序列编译为机器代码,然后再以本机方式执行它。它的主要目的是在性能方面进行大量优化。

所以现在,让我们找到你问题的答案。

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 上的虚拟平台
  • 它的组件类装入器将文件装入RAM.class
  • JVM 中的字节代码验证程序组件检查代码中是否存在任何访问限制冲突。(这是java安全的主要原因之一)
  • 接下来,执行引擎组件将字节码转换为可执行的机器代码

希望这对你有所帮助..


答案 2

两者兼而有之,但也不是传统意义上的。

现代 JVM 采用字节码,并在首次需要时将其编译为本机代码。在这种情况下,“JIT”代表“及时”。它充当来自外部的解释器,但实际上在幕后,它正在编译成机器代码。

JVM不应与Java编译器混淆,后者将源代码编译为字节码。因此,将其视为“编译器”是没有用的,而是要知道在后台它确实进行了一些编译。


推荐