当我第一次阅读有关口译员时,我认为他们采用了源语言,并且一次一个陈述,将其翻译成机器语言并将其提供给CPU执行。
然而,我刚刚学会了解释器直接执行代码,而JVM拥有它自己的一组机器指令,字节码被转换为它并从那里执行。第二个对我来说更有意义,因为我知道JVM拥有它自己的虚拟处理器,而我所知道的很少,这表明你不能在没有处理器的情况下执行代码。
如果这是准确的,这是否意味着所有口译员都是虚拟机?如果没有涉及主处理器,那么这一切是如何工作的?
我在这里和其他地方做了一些研究,但我能理解的答案并不清楚,其余的假设我已经了解了我尚未介绍过的概念。
我希望得到一个相当简单的答案。
答案 0 :(得分:1)
不,并非所有解释器都是虚拟机。
一个很好的例子是picoc,它是一个C解释器。虚拟机解释器(也称为字节码解释器)很常见且更受欢迎,因为它们比常规解释器更有效率和运行速度更快,而常规解释器只需转换字符串并运行它们。
字节码解释器的作用是将字符串转换为类似汇编语言的数字格式(称为字节码)。然后优化字节码(如果编译器完全进行优化),最后由解释器执行字节码。
有一个程序读取和理解一个纯粹的源文件是多么复杂和执行转的慢,而不是让程序将源文件转换为数字然后有一个不同的程序部分的数字是什么电脑了解得更好。
这一切都是为了速度,效率和做正确的尝试!
答案 1 :(得分:0)
我认为你的事情比现在更复杂。
如果没有涉及主机处理器,那么这一切是如何工作的?
主处理器是唯一可以执行指令的东西,所以当你运行程序时它总是涉及到它。
首先从字节码转换为本机机器代码指令然后执行该解释器的解释器与直接执行源语言"的解释器之间没有根本区别。在第二种情况下,机器代码指令只是解释器的实现。
我不认为所有解释器都是虚拟机。但区别是模糊的;任何可以运行代码的东西(CPU本身或任何解释器)都提供了运行该代码的环境,您可以调用该环境及其指令集(无论是由字节码还是由JavaScript源代码组成)a&# 34;虚拟机"。
Oracle的Java VM是一个非常复杂的软件,有许多聪明的优化。它可以在解释模式下运行Java字节码(它只是逐个查看字节码指令,然后为每个字节码指令运行相应的本机机器代码指令),但它也包含一个JIT(即时) )编译器在运行时将字节码块转换为本机机器码,然后每次执行该部分程序时重新使用。它还包含许多复杂的技术,以使代码尽可能快地运行。