虚拟机是一个相对于物理机的概念。物理机是真实存在的计算机硬件设备,包括CPU、内存、硬盘等物理组件,直接执行机器码(二进制指令),性能最好,但是和平台相关,无跨平台能力;虚拟机是通过软件模拟的计算机系统,是在物理机之上创建一个抽象的执行环境,虚拟机主要分为两大类:系统虚拟机和进程虚拟机,系统虚拟机模拟完整的硬件平台,可以实现资源隔离,多系统共存,比如VMWare、VirtualBox等;进程虚拟机为特定程序提供运行环境,实现跨平台效果,比如JVM、.NET CLR等。
执行引擎是JVM的核心组件,负责执行字节码指令,相当于物理机的CPU。主要任务是将字节码翻译成底层系统指令,让程序真正运行起来。
解释执行和编译执行
《Java虚拟机规范》中制定了Java虚拟机字节码执行引擎的概念模型,但在不同的虚拟机实现中,在执行字节码时,通常会有解释执行和编译执行两种选择;
解释执行:由一个称为解释器的程序,直接读取源代码或者中间代码,逐行或者逐条的翻译成对应的机器指令,并立即执行该指令;支持跨平台,只要目标平台有对应的解释器,同一份源代码就可以运行,支持在运行时动态改变类型、动态执行代码、反射等高级特性,因为这些操作在解释环境中更容易实现;但是执行效率比较低,每次运行程序,都需要解释器逐行解释翻译,即使重复执行一段代码,也需要重复翻译,带来了巨大的性能开销。但是启动速度快,无需等待。
编译执行:将程序的源代码通过编译器一次性完整的翻译成目标平台的机器码,生成一个独立的可执行文件,之后将这个可执行文件放到目标平台上直接运行,无需再次编译或依赖编译器;编译器在编译时可以进行深度优化,生成高度优化的机器码,直接由CPU执行;同时可以独立部署,只要目标操作系统支持,无需安装额外的运行时环境;缺点就是强平台依赖性,无法跨平台,灵活性较低,编译型语言通常静态性强,难以支持动态性。
HotSpot中的执行引擎
在HotSpot中,是通过解释器和即时编译器(JIT)协同工作,在快速启动和最佳性能之间取得完美平衡。

最低0.47元/天 解锁文章
1543

被折叠的 条评论
为什么被折叠?



