虚拟机
1、概述
程序运行在CPU上的,而CPU的架构却是多种多样的(例如ARM、ARM64、x86、x64,MIPS等等),CPU架构不同,那么CPU的指令集和执行方式也就不同。但是一个程序总不能只运行在某一种架构的CPU上吧,我们希望应用程序可以运行在各种CPU上。那么,这个问题就有几种解决思路了:
思路1:针对不同的CPU架构,将程序编译成对应CPU的机器码文件。假设我们的app要同时支持ARM和x86架构的手机,那么你就要为这两种手机各编译一个安装包,而且他们之间不能互换。
思路2:当java这种虚拟机语言出现后,人们就多了一个选择。在程序和硬件之间增加一个虚拟层,让程序运行在虚拟层里面,虚拟层运行在硬件上面,那么程序员再也不需要去关心各种各样的CPU架构了的底层实现了,把这个工作交给虚拟层,被称为虚拟机。
java当年提出的口号:“一次编码,到处运行”,在虚拟机的帮助下就实现如下图的效果:
上面提到的就是java虚拟机JVM的由来,是java跨平台性质的体现。而Android操作系统在JVM的基础上做出了一下改变,基本上就是将JVM搬到了移动设备上,但是由于移动设备资源受限的特殊性(电池、内存、CPU的运算力以及功耗等等都是受限的),造成了Android虚拟机和JVM还是有着很大的区别的。