纯Linux而不需要虚拟机的手机系统当然有,火狐的FirefoxOS、Ubuntu Touch、三星Tizen操作系统、以及曾经大名鼎鼎的Megoo都是没有虚拟机的。
Android使用虚拟机是因为采用了Java作为核心开发语言,Java足够成熟、生态健全、开发者众多,这是Android早期发展迅速的主要原因,当然Android的高速发展也给了Java第二春。Oracle公司现在又在作死,各种用Java的问题刁难Google,Google推出Flutter框架、扶持Kotlin,以及打造Fuchsia操作系统,就是为了能够找到取代Java甚至直接取代Android的解决方案。
值得提一下的是尽管Megoo系统随着诺基亚的失败而消失了,不过Megoo系统的很多理念到现在还被iOS和Android系统借鉴,现在智能机的主要手势操作基本上全是借鉴Megoo操作系统的设计理念。
Android为什么要用虚拟机Android诞生之初并不是师出名门,后来被Google收购也算是傍上了大款,Android使用虚拟机的主要原因还是因为Java,因为Java有足够好的凯源生态,更重要的是Java有成熟的开发者生态,最最重要的当然还是Java是第一大编程语言、背后有最多的开发者。-Linux
Android诞生之初,跟Java普遍使用JVM家在字节码文件(.class
),Android的虚拟机是Dalvik虚拟机,每次运行程序,Dalvik负责加载dex/odex文件然后解析成机器码让Android系统调用。
2010年5月20日,Google正式向外界发布了版本代号为Froyo冻酸奶的Android2.2版本,这是Android第一个成熟版本,Google在这个版本的虚拟中加入了即时编译、也就是我们通常所说的Just-In-Time Compiler(JIT)编译器,Dalvik使用JIT进行编译,JIT可以对经常使用的dex/odex进行编译和优化,将其翻译成精简的Native Code执行,引入JIT之后Dalvik性能提升了3到6倍。-linux
2013年10月31日,Google正式对外发布代号为Kitkat的Android4.4,Google为了改善Android糟糕的用户体验,开发了全新的虚拟机运行环境,也就是Android Runtime(ART),在这个版本中Google还有了新的编译策略Ahead of time(AOT),不过这时候ART和Dalvik共存,直到2014年10月16日代号为Lollipop棒棒糖的Android5.0版本,ART彻底取代Dalvik,AOT成为了唯一的编译模式,AOT相对于JIT的优点是,JIT是运行时动态编译,每次运行程序的时候都要编译,AOT则是静态编译,应用在安装的时候就已经完成了编译,程序运行的时候不用重新编译,这才是真正的本地应用概念。-Linux
ART还对垃圾回收机制进行了改革,ART只有一次垃圾回收暂停、而Dalvik有两次,ART在垃圾回收保持暂停的时候并行处理,ART还优化了垃圾回收的效率,让系统能够及时垃圾回收、及时减少后台内存使用和碎片化问题。-linux
不过在Android7.0之后JIT又重新回归了,AOT/JIT混合编译模式又重新回归了,混合编译当然有优点,不过还是很难解决Android存在的各种问题,毕竟Android的问题一大部分是Java自身的问题,除此之外Android生态本身也比较混乱,这也是Android体验差的重要原因之一。-Linux