我有一个关于JVM的基本问题:它是编译器还是解释器?
如果是解释器,那么JVM中存在的JIT编译器呢? 如果不是,那么JVM究竟是什么? (我不想要将字节码转换为机器特定代码等的jVM的基本定义。)
答案 0 :(得分:139)
首先,让我们清楚地了解以下术语
Javac
是Java编译器 - 将您的Java代码编译为字节码
JVM
是Java虚拟机 - 运行/解释/将Bytecode转换为本地机器代码
JIT
是即时编译器 - 在本地执行之前,将给定的字节码指令序列编译为运行时的机器代码。它的主要目的是对性能进行大量优化。
现在,让我们找到你问题的答案..
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?
- 答案
.class
文件加载到RAM中希望这有助于你......
答案 1 :(得分:31)
两者兼而有之,但传统意义上都没有。
现代JVM采用字节码并在首次需要时将其编译为本机代码。在这种情况下,“JIT”代表“及时”。它从外部充当解释器,但实际上它正在编译成机器代码。
不应将JVM与Java编译器混淆,Java编译器将源代码编译为字节码。因此,将它视为“编译器”是有用的,而是知道在后台它确实进行了一些编译。
答案 2 :(得分:5)
两者都是。它首先解释字节码并且可以(如果它确定它值得),然后将该字节码编译为本机机器代码。
答案 3 :(得分:5)
与评论部分中已说明的@delnan一样,既不。
JVM是一个运行Java bytecode的抽象机器。
JVM有几个实现:
...和many others。
其他大多数人在谈论JVM时都会回答HotSpot或 实现JVM的上述方法的一些混合。
答案 4 :(得分:4)
两者都是。它可以解释字节码,并将其编译为本机代码。
答案 5 :(得分:1)
正如其他人所说的那样!如果您想要详细介绍它,请参阅:This IBM Description
答案 6 :(得分:0)
Javac是编译器,而不是传统的编译器。 编译器通常将源代码转换为机器级别的语言以执行代码,这是一次完成的操作,即在ONCE处将整个代码提取并转换为机器级别的语言。 (有关详情,请参见下文)。 同时,JavaC会将其转换为字节码而不是机器级语言。
JIT是Java编译器,但也充当解释器。典型的编译器会立即将所有代码从源代码转换为机器级别的语言。相反,JIT逐行执行(逐行执行是Interpreters的功能),并将JavaC生成的字节码转换为机器级语言并执行它。带有JIT的JVM具有多种实现。热点是Java编程的主要热点之一。热点实现使JIT通过一次将重复的代码块转换为机器级语言(如上述编译器)来优化执行,从而可以更快地执行它们,而不用将每行代码1转换为1。 因此,就编译器和解释器的典型定义而言,答案不是黑白的。
这是我在阅读一些在线答案,博客等之后的理解。如果有人对您的理解有所帮助,请随时提出建议。
答案 7 :(得分:-5)
JVM有编译器和解释器。因为编译器编译代码并生成字节码。之后,解释器将字节码转换为机器可理解的代码。
示例:编写并编译程序,它在Windows上运行。将.class文件带到另一个操作系统(Unix),它将运行,因为解释器将字节码转换为机器可理解的代码。