[英]Is the JVM a compiler or an interpreter?
我有一个关于 JVM 的非常基本的问题:它是编译器还是解释器?
如果是解释器,那么JVM内部的JIT编译器呢?
如果两者都不是,那么 JVM 究竟是什么? (我不想要将字节码转换为机器特定代码等的 JVM 基本定义。)
首先,让我们清楚地了解以下术语
Javac
是 Java Compiler -- 将你的 Java 代码编译成字节码
JVM
是 Java 虚拟机——运行/解释/将字节码转换为本地机器码
JIT
是即时编译器——在本地执行之前,在运行时将给定的字节码指令序列编译为机器代码。 它的主要目的是对性能进行大量优化。
那么现在,让我们为您的问题寻找答案..
1) JVM: is it a compiler or an interpreter?
-- Ans:翻译
2) what about JIT compiler that exist inside the JVM?
-- Ans:如果你完整地阅读了这个回复,你现在可能知道了
3) what exactly is the JVM?
——答:
.class
文件加载到 RAM 中希望这对你有帮助..
两者兼而有之,但都不是传统意义上的。
现代 JVM 获取字节码,并在第一次需要时将其编译为本机代码。 在这种情况下,“JIT”代表“及时”。 它从外部充当解释器,但实际上它在幕后编译成机器代码。
JVM 不应与 Java 编译器混淆,后者将源代码编译为字节码。 因此,将其视为“编译器”是没有用的,而是要知道它在后台确实进行了一些编译。
两者都是。 它从解释字节码开始,然后可以(如果它认为值得)将该字节码编译为本地机器码。
两者都是。 它可以解释字节码,并将其编译为本机代码。
Javac 是一个编译器,但不是传统的编译器。 编译器通常将源代码转换为机器级语言以供执行,这是一次性完成的,即一次性完成整个代码并转换为机器级语言。 (下面有更多内容)。 同时,JavaC 将其转换为字节码而不是机器级语言。
JIT 是 Java 编译器,但也充当解释器。 典型的编译器会将所有代码一次从源代码转换为机器级语言。 相反,JIT 逐行(逐行执行是解释器的一个特性)并将 JavaC 生成的字节码转换为机器级语言并执行它。 包含 JIT 的 JVM 有多种实现。 Hotspot 是 Java 编程的主要热点之一。 Hotspot 实现使 JIT 通过将重复的代码块一次转换为机器级语言(如上面提到的编译器)来优化执行,以便它们可以更快地执行,而不是一一转换每一行代码。因此,对于编译器和解释器的典型定义,答案不是黑白分明。
这是我看了几个网上的回答、博客等后的理解,如果有人对提高这种理解有建议,请随时提出建议。
我有一个关于 JVM 的非常基本的问题:它是编译器还是解释器?
如果是解释器,那么JVM内部的JIT编译器呢?
如果两者都不是,那么JVM到底是什么? (我不想要将字节码转换为机器特定代码等的 JVM 基本定义。)
JVM 有编译器和解释器。 因为编译器编译代码并生成字节码。 之后解释器将字节码转换为机器可理解的代码。
示例:编写并编译一个程序,它在 Windows 上运行。 将 .class 文件带到另一个操作系统(Unix),它将运行,因为解释器将字节码转换为机器可理解的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.