我有一个关于口译,编译器和VM问题
现在我知道口译员和编译器,但什么是关于从以前的2 虚拟机不同的差异? 什么是虚拟机在口译员和编译器的优点和缺点?
非常感谢
我有一个关于口译,编译器和VM问题
现在我知道口译员和编译器,但什么是关于从以前的2 虚拟机不同的差异? 什么是虚拟机在口译员和编译器的优点和缺点?
非常感谢
虚拟机是不完全到编译器或解释器的替代方法。 我想您所想JIT编译器,这是许多虚拟机是如何实现的。
虚拟机本身正是其名 - 这是一台机器(处理器),实际上并不存在。 例如,大多数处理器没有处理内存分配,或任何类型的任何知识内在的方式。 Java虚拟机,虽然,有一个new
指令分配一定的类的实例。 虚拟机的设计者决定,这是在语言中的一个重要概念,足以值得自己的操作码,这是运行在虚拟机的基本单元。
创建自己的指令集的优点是一般弥合长编译/优化时间和缓慢的解释之间的差距。 当你编译一个Java类,例如,你不必做任何寄存器分配或内联或任何传统的编译器的东西。 该JIT能做到这一点以后,但只为您运行足够的时间码的部分,分布在该程序的运行。 JVM的指令集是足够接近的Java初始编译快,而且它是简单和快速阅读的VM,不像Java源代码。
至于解释VS的JIT编译器,权衡一般都是围绕运行时性能VS开发时间。 一个JIT花费很多时间来开发,而是一种解释是在运行慢了许多。 在很多情况下,虽然,像脚本和中小型网站,让你真正看到使用JIT的任何利益的程序不运行足够长的时间。
我还要提到VMware等软件。 这也是一个虚拟机,但它使用的指令集也恰好在真实的硬件使用。 这是相同的基本概念作为一种语言虚拟机,因为它伪装成一台机器,实际不存在,但在实践中它是不同的,非常复杂。
简明英语
编译器转换成其他语言。 例如,C#到IL,爪哇成字节代码,C ++成二进制机器代码。 不执行发生在编译阶段。
解释器解释(执行)在从源文件一次一行。 如PHP,Perl和其它脚本语言
虚拟机可以参考几件事情,这两个我所知道的:
有没有利弊。 所有这三个做到这一点很难进行比较不同的工作。
语言和进来没有特定的顺序平台,有数以百计的其他样本
答案就在这里