口译VS编译器VS虚拟机(Interpreters vs Compilers vs Virtual

2019-07-19 05:14发布

我有一个关于口译,编译器和VM问题

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

非常感谢

Answer 1:

虚拟机是不完全到编译器或解释器的替代方法。 我想您所想JIT编译器,这是许多虚拟机是如何实现的。

虚拟机本身正是其名 - 这是一台机器(处理器),实际上并不存在。 例如,大多数处理器没有处理内存分配,或任何类型的任何知识内在的方式。 Java虚拟机,虽然,有一个new指令分配一定的类的实例。 虚拟机的设计者决定,这是在语言中的一个重要概念,足以值得自己的操作码,这是运行在虚拟机的基本单元。

创建自己的指令集的优点是一般弥合长编译/优化时间和缓慢的解释之间的差距。 当你编译一个Java类,例如,你不必做任何寄存器分配或内联或任何传统的编译器的东西。 该JIT能做到这一点以后,但只为您运行足够的时间码的部分,分布在该程序的运行。 JVM的指令集是足够接近的Java初始编译快,而且它是简单和快速阅读的VM,不像Java源代码。

至于解释VS的JIT编译器,权衡一般都是围绕运行时性能VS开发时间。 一个JIT花费很多时间来开发,而是一种解释是在运行慢了许多。 在很多情况下,虽然,像脚本和中小型网站,让你真正看到使用JIT的任何利益的程序不运行足够长的时间。

我还要提到VMware等软件。 这也是一个虚拟机,但它使用的指令集也恰好在真实的硬件使用。 这是相同的基本概念作为一种语言虚拟机,因为它伪装成一台机器,实际不存在,但在实践中它是不同的,非常复杂。



Answer 2:

简明英语

编译器转换成其他语言。 例如,C#到IL,爪哇成字节代码,C ++成二进制机器代码。 不执行发生在编译阶段。

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

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

  • 管理程序相关的虚拟机,如Hyper-V的 , Xen的 。 这允许你在一个单一的硬件上运行多个OS
  • 软件运行时,像Java虚拟机 , 公共语言运行库 。 这个软件允许一个运行独立于平台的中间语言(IL代码,字节码),并执行特定机器指令( 即时编译 )。 通常情况下,这样的VM负责其他卫星任务:资源管理,内存清理,线程,安全等

有没有利弊。 所有这三个做到这一点很难进行比较不同的工作。

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



Answer 3:

实机VS虚拟机

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

口译VS编译器

答案就在这里



文章来源: Interpreters vs Compilers vs Virtual Machines