我对解释器,编译器和VM有疑问
现在我知道解释器和编译器之间的差异但是前两个 VIRTUAL MACHINES 有什么不同? VM在口译员和编译器上的优缺点是什么?
非常感谢
答案 0 :(得分:25)
虚拟机并不是编译器或解释器的替代品。我想你正在考虑一个JIT编译器,它实现了多少个虚拟机。
虚拟机本身正如名称所说 - 它是一台实际上并不存在的机器(处理器)。例如,大多数处理器没有任何内在的方式来处理内存分配或任何类型的知识。但是,Java VM有一条new
指令,用于分配某个类的实例。 VM的设计者认为这是一个非常重要的语言概念,值得拥有自己的操作码,这是操作系统的基本操作单元。
创建自己的指令集的好处通常是弥合长编译/优化时间和慢速解释器之间的差距。例如,当您编译Java类时,您不必执行任何寄存器分配或内联或任何传统编译器的操作。 JIT将在稍后执行此操作,但仅适用于您运行足够次数的代码部分,并在程序运行时分散。 JVM的指令集足够接近Java,初始编译很快,而且与Java源代码不同,它对VM的读取简单快捷。
对于解释器与JIT编译器,权衡通常围绕运行时性能与开发时间的关系。 JIT需要花费更长的时间来开发,但是运行时解释器要慢得多。但在很多情况下,如脚本和中小型网站,该程序运行时间不足以让您真正看到使用JIT的任何好处。
我还应该提到像VMware这样的软件。这也是一个虚拟机,但它使用的指令集也恰好在真实硬件上使用。它与语言VM的基本概念相同,因为它假装是一台物理上不存在的机器,但实际上它是不同的,非常复杂。
答案 1 :(得分:17)
普通英语
编译器将一种语言转换为另一种语言。例如,C#转换为IL,Java转换为字节码,C ++转换为二进制机器码。编译阶段没有执行任何操作。
解释器一次从源文件解释(执行)一行。如PHP,Perl,其他脚本语言
虚拟机可以参考几件事,我知道的两件事:
没有利弊。这三个人都做了不同的工作,很难比较。
语言和平台没有特别的顺序,还有数百个其他样本
答案 2 :(得分:6)