回答
的虚拟机是不完全到编译器或解释器的替代方法。我想你正在考虑一个JIT编译器,这是多少个虚拟机的实现。
虚拟机本身就是名称所说 - 它是一台机器(处理器),实际上并不存在。例如,大多数处理器没有任何处理内存分配的内在方式,或任何类型的知识。但是,Java VM有一个new
指令来分配某个类的实例。虚拟机的设计人员认为这是一种足够重要的语言概念,应该拥有自己的操作码,操作码是虚拟机操作的基本单元。
创建自己的指令集的好处通常是缩短长编译/优化时间和慢速解释器之间的差距。例如,当你编译一个Java类时,你不必做任何寄存器分配,内联或任何传统的编译器。 JIT稍后会做,但只适用于运行足够多次的代码部分,并在程序运行时分散开来。 JVM的指令集与Java足够接近,初始编译速度很快,而且与Java源代码不同,Java的读取操作简单快捷。
至于解释器vs JIT编译器,折衷通常围绕运行时性能与开发时间相关。JIT需要更长的时间才能开发,但解释器在运行时会慢很多。但在很多情况下,如脚本和中小型网站,该程序的运行时间不足以让您真正看到使用JIT的好处。
我还应该提到像VMware这样的软件。这也是一个虚拟机,但它使用了一个指令集,它也恰好在真实的硬件上使用。这与语言虚拟机具有相同的基本概念,因为它假装是一台没有物理存在的机器,但实际上它是不同的和非常复杂的。
纯英文
编译转换成其他语言。例如,C#转换成IL,Java转换成字节码,C++转换成二进制机器码。在编译阶段没有执行任何操作。
解释器从源文件一次解释(执行)一行。如PHP,Perl和其它脚本语言
虚拟机可以参考几件事情,这两个我知道的:
- 管理程序相关的虚拟机,如Hyper-V,Xen。这些允许您在单个硬件上运行多个操作系统
- 软件运行时间,如Java Virtual Machine,Common Language Runtime。这一软件允许运行独立于平台的中间语言(IL代码,字节代码)并执行机器特定的指令(just-in-time compilation)。通常,这样的VM负责其他卫星任务:资源管理,内存清理,线程,安全等。
没有优点和缺点。三个人都做不同的工作,这些工作几乎无法比较。
语言和平台来没有特定的顺序,有数以百计其它样品
感谢了很多,明白了它完美:) – DodoSerebro
编译器和解释器和虚拟机可以为任何语言编写的任何语言可以翻译成,可以是一个形式由下降VM执行。任何语言都可以编译,当然任何语言都可以解释。这并不意味着这是一件有趣的事情。 – amirouche
- 1. MSBuild vs编译器
- 2. 锡兰编译器和虚拟机
- 3. $编译vs $ componentController
- 4. VS 2015编译器在struct
- 5. GCC VS MSVS编译器
- 6. Javassist Vs. Java编译器API
- 7. C89 vs c99 GCC编译器
- 8. 虚拟机VS.中间件
- 9. 编译失败vs编译失败
- 10. 如何为Erlang虚拟机编译
- 11. CLR语言优化。语言编译器VS JIT编译器
- 12. 在线编译器VS本地编译器
- 13. 是否可以强制VS 2013使用VS 2010编译器进行编译?
- 14. 差异编译VS 2015和VS 2010
- 15. poco Lib dosnt编译vs vs express 9
- 16. PHP - 即时编译器Vs解释器
- 17. 如果英特尔编译器是默认编译器,如何为VS 2003设置本机Microsoft编译器?
- 18. SVN主机vs使用虚拟主机
- 19. 编译python虚拟环境
- 20. useFactory vs useValue与AoT编译
- 21. 编译python代码vs py2exe
- 22. VS 2005编译保存C#
- 23. 虚拟函数编译器优化C++
- 24. Pantheios Qt Creator中与VS C++ 2008编译器编译
- 25. 关于VS 2008编译器和SCONS
- 26. C#编译器即服务:Mono.CSharp vs Microsoft.CSharp
- 27. VS编译器可以男星
- 28. OpenMP vs gcc编译器优化
- 29. PHP加速器VS即时编译
- 30. 如何更改VS的编译器?
Top Notch Mate,正是我所需要的 – DodoSerebro
“并不真正存在”并不完全是恰当的表达。实际情况是,可能没有可以使用给定虚拟机的相同字节码语言的制造机器处理器。这并不意味着这种机器处理器不能制造。 – amirouche