Java 所有解释器都是虚拟机吗?

Java 所有解释器都是虚拟机吗?,java,jvm,interpreter,vm-implementation,Java,Jvm,Interpreter,Vm Implementation,当我第一次读到关于口译员的文章时,我的印象是他们采用源语言,一次一条语句,将其翻译成机器语言,并将其输入CPU执行 然而,我刚刚了解到解释器直接执行代码,JVM有自己的一组机器指令,字节码被翻译成字节码,然后从那里执行。第二个对我来说更有意义,因为我知道JVM有自己的虚拟处理器,我所知的一点表明没有处理器就无法执行代码 如果这是准确的,这是否意味着所有的口译员都是虚拟机的?如果不涉及主机处理器,那么所有这些是如何工作的 我在这里和其他地方做了一些研究,但我能理解的答案并不清楚,其余的假设是我了解

当我第一次读到关于口译员的文章时,我的印象是他们采用源语言,一次一条语句,将其翻译成机器语言,并将其输入CPU执行

然而,我刚刚了解到解释器直接执行代码,JVM有自己的一组机器指令,字节码被翻译成字节码,然后从那里执行。第二个对我来说更有意义,因为我知道JVM有自己的虚拟处理器,我所知的一点表明没有处理器就无法执行代码

如果这是准确的,这是否意味着所有的口译员都是虚拟机的?如果不涉及主机处理器,那么所有这些是如何工作的

我在这里和其他地方做了一些研究,但我能理解的答案并不清楚,其余的假设是我了解一些我还没有被介绍过的概念


我希望得到一个相当简单的答案

我认为你把事情弄得比实际情况更复杂了

如果不涉及主机处理器,那么所有这些是如何工作的

主机处理器是唯一可以执行指令的东西,所以当你运行一个程序时,它当然总是涉及到的

首先将字节码翻译成本机机器码指令然后执行的解释器与“直接”执行源语言的解释器之间没有根本区别。在第二种情况下,机器代码指令只是解释器的实现

我不认为所有的口译员都是虚拟机。但区别是模糊的;任何可以运行代码的东西(CPU本身或任何解释器)都为代码提供了一个运行环境,您可以将该环境及其指令集(无论是字节码还是JavaScript源代码)称为“虚拟机”


Oracle的Java VM是一个非常复杂的软件,具有许多巧妙的优化。它可以在解释模式下运行Java字节码(它只是逐个查看字节码指令,然后为每个字节码指令运行相应的本机代码指令),但它还包含一个JIT(实时)编译器,可在运行时将字节码块转换为本机代码,然后,每次执行程序的该部分时都会重复使用。它还包含许多使代码尽可能快地运行的复杂技术。

不,不是所有的解释器都是虚拟机

一个很好的例子是C解释器。虚拟机解释器(也称为字节码解释器)很常见,也更受欢迎,因为与只需转换字符串并运行字符串的常规解释器相比,虚拟机解释器效率更高,运行速度更快

字节码解释器所做的是将字符串转换成类似于汇编语言的数字格式(称为字节码)。然后对字节码进行优化(如果编译器进行了优化),最终由解释器执行字节码

让一个程序读取并理解一个纯源文件要比让一个程序将源文件转换成数字,然后让程序的不同部分——数字——计算机更好地理解数字——复杂得多,执行速度也慢得多

这一切都是为了速度、效率,以及做那些被证明是真实的事情

这里有几个答案: