2013-02-03 82 views
18

我有一个关于口译,编译器和VM口译VS编译器VS虚拟机

问题

现在我知道口译员和编译器,但什么是对虚拟机从以前的2个不同的差异?虚拟机通过口译和编译器有什么优点和缺点?

非常感谢

回答

23

的虚拟机是不完全到编译器或解释器的替代方法。我想你正在考虑一个JIT编译器,这是多少个虚拟机的实现。

虚拟机本身就是名称所说 - 它是一台机器(处理器),实际上并不存在。例如,大多数处理器没有任何处理内存分配的内在方式,或任何类型的知识。但是,Java VM有一个new指令来分配某个类的实例。虚拟机的设计人员认为这是一种足够重要的语言概念,应该拥有自己的操作码,操作码是虚拟机操作的基本单元。

创建自己的指令集的好处通常是缩短长编译/优化时间和慢速解释器之间的差距。例如,当你编译一个Java类时,你不必做任何寄存器分配,内联或任何传统的编译器。 JIT稍后会做,但只适用于运行足够多次的代码部分,并在程序运行时分散开来。 JVM的指令集与Java足够接近,初始编译速度很快,而且与Java源代码不同,Java的读取操作简单快捷。

至于解释器vs JIT编译器,折衷通常围绕运行时性能与开发时间相关。JIT需要更长的时间才能开发,但解释器在运行时会慢很多。但在很多情况下,如脚本和中小型网站,该程序的运行时间不足以让您真正看到使用JIT的好处。

我还应该提到像VMware这样的软件。这也是一个虚拟机,但它使用了一个指令集,它也恰好在真实的硬件上使用。这与语言虚拟机具有相同的基本概念,因为它假装是一台没有物理存在的机器,但实际上它是不同的和非常复杂的。

+0

Top Notch Mate,正是我所需要的 – DodoSerebro

+2

“并不真正存在”并不完全是恰当的表达。实际情况是,可能没有可以使用给定虚拟机的相同字节码语言的制造机器处理器。这并不意味着这种机器处理器不能制造。 – amirouche

14

纯英文

编译转换成其他语言。例如,C#转换成IL,Java转换成字节码,C++转换成二进制机器码。在编译阶段没有执行任何操作。

解释器从源文件一次解释(执行)一行。如PHP,Perl和其它脚本语言

虚拟机可以参考几件事情,这两个我知道的:

  • 管理程序相关的虚拟机,如Hyper-VXen。这些允许您在单个硬件上运行多个操作系统
  • 软件运行时间,如Java Virtual Machine,Common Language Runtime。这一软件允许运行独立于平台的中间语言(IL代码,字节代码)并执行机器特定的指令(just-in-time compilation)。通常,这样的VM负责其他卫星任务:资源管理,内存清理,线程,安全等。

没有优点和缺点。三个人都做不同的工作,这些工作几乎无法比较。

语言和平台来没有特定的顺序,有数以百计其它样品

+0

感谢了很多,明白了它完美:) – DodoSerebro

+0

编译器和解释器和虚拟机可以为任何语言编写的任何语言可以翻译成,可以是一个形式由下降VM执行。任何语言都可以编译,当然任何语言都可以解释。这并不意味着这是一件有趣的事情。 – amirouche

6

实机VS虚拟机

  • 真机是其机器代码是由硬件执行
  • 虚拟机是一个他的“机器代码”由解释执行。

口译VS编译器

Answer is here