Java解释器和JVM的区别

12

我听到有人说“JVM必须是Java解释器,但Java解释器不一定是JVM”。这是真的吗?

我的意思是Java解释器和JVM之间有什么区别吗?

6个回答

17

是的,它们有区别。

Java虚拟机:

一种软件“执行引擎”,可以在微处理器上(无论是在计算机中还是在其他电子设备中)安全地和兼容地执行Java类文件中的字节码。

Java解释器:

一个模块,可以交替解码并执行代码体中的每个语句。Java解释器解码并执行Java虚拟机的字节码。

Java解释器实际上是JVM的一部分。虚拟机不仅执行字节码,还有很多任务需要完成。这种完整的环境称为JVM。

参考:


Java解释器实际上是JVM的一部分。你的意思是Java 字节码 解释器是JVM的一部分...因为JVM甚至看不到Java代码。 - flow2k
尽管如此,这也并不完全正确,因为正如你所说,JVM不仅仅是一个解释器 - 它通过其JIT编译器进行优化,否则Java对于强调性能的应用程序将难以承受。 - flow2k

8
简单地说,JVM解释字节码,Java解释Java。它们不同是因为字节码和Java是不同的语言。
字节码是低级语言,就像机器代码一样。字节码旨在由称为字节码解释器或虚拟机的程序运行。字节码的目的是易于解释。
Java是高级语言,就像C或Python一样。这些语言也可以被解释:您只需编写一个可以运行其代码的程序。它不必涉及字节码。只是高级语言更难直接解释。
通常通过将Java程序先翻译为字节码程序来“解释”Java。然后Java虚拟机(JVM)运行字节码。
但您可以用同样的方式解释任何语言。如果您将其他语言翻译成正确的字节码,JVM可以解释其他语言。
您还可以直接解释一种编程语言,而不需要任何字节码。一些BASIC解释器只在源代码中查找BASIC指令并执行它们。他们不会首先生成一个使用不同语言的新程序。如果您对Java做同样的事情,那么它将是一个Java解释器,但不是JVM。

0

Java虚拟机是一个虚拟处理器,Java解释器是Java工具。谢谢


3
编辑您的答案,包括一些有价值的信息和参考资料。 - Narendra Pathai

0
首先,从(理论上)任何语言编写的代码都可以编译成JVM字节码,以允许在该环境中执行。Java解释器只能运行Java代码。

我认为那是不正确的。据我所知,Java解释器与JVM一样,并不仅限于Java语言。实际上,Java语言代码通常会被编译成字节码,然后在JVM中进行解释和/或执行。 - Carl Smotricz

0

1
这并不是严格的事实。JVM会在决定编译哪些代码之前,先以解释模式运行一段时间。因此,没错,JVM是一个Java字节码(class文件)解释器。 - dty
@Danny:并不存在“the” JVM。不同供应商在不同平台上提供了多个JVM实现,它们之间的工作方式并不完全相同。 - Michael Borgwardt
1
嘿,我不是第一个提到“JVM”的人!这取决于你所说的“工作方式”。它们都执行字节码,并提供到底层操作系统功能(如线程、文件等)的映射。其中一些没有JIT(这会增加我的论点,即说“JVM是JIT编译器”是不准确的),一些具有不同的线程模型(例如JRockit的旧m:n模型),一些具有不同的GC算法,但它们本质上都做同样的事情。但是说“JVM是JIT编译器”是不准确的。 - dty

0

据我所知...

Java解释器将字节码作为要执行的命令执行。字节码被执行。

JVM接受字节码并生成机器码。字节码被编译成机器码,然后执行机器码。


一个JVM不一定需要包含JIT编译器。其中一些包括JIT编译器的JVM有禁用它的选项。我的上面是“-Xint”。 - JeremyP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接