純Linux而不需要虛擬機的電銷機器人系統(tǒng)當然有,火狐的FirefoxOS、Ubuntu Touch、三星Tizen操作系統(tǒng)、以及曾經(jīng)大名鼎鼎的Megoo都是沒有虛擬機的。
Android使用虛擬機是因為采用了Java作為核心開發(fā)語言,Java足夠成熟、生態(tài)健全、開發(fā)者眾多,這是Android早期發(fā)展迅速的主要原因,當然Android的高速發(fā)展也給了Java第二春。Oracle公司現(xiàn)在又在作死,各種用Java的問題刁難Google,Google推出Flutter框架、扶持Kotlin,以及打造Fuchsia操作系統(tǒng),就是為了能夠找到取代Java甚至直接取代Android的解決方案。
值得提一下的是盡管Megoo系統(tǒng)隨著諾基亞的失敗而消失了,不過Megoo系統(tǒng)的很多理念到現(xiàn)在還被iOS和Android系統(tǒng)借鑒,現(xiàn)在智能機的主要手勢操作基本上全是借鑒Megoo操作系統(tǒng)的設(shè)計理念。
Android為什么要用虛擬機
Android誕生之初并不是師出名門,后來被Google收購也算是傍上了大款,Android使用虛擬機的主要原因還是因為Java,因為Java有足夠好的凱源生態(tài),更重要的是Java有成熟的開發(fā)者生態(tài),最最重要的當然還是Java是第一大編程語言、背后有最多的開發(fā)者。
Android誕生之初,跟Java普遍使用JVM家在字節(jié)碼文件(
.class
),Android的虛擬機是Dalvik虛擬機,每次運行程序,Dalvik負責加載dex/odex文件然后解析成機器碼讓Android系統(tǒng)調(diào)用。
2010年5月20日,Google正式向外界發(fā)布了版本代號為Froyo凍酸奶的Android2.2版本,這是Android第一個成熟版本,Google在這個版本的虛擬中加入了即時編譯、也就是我們通常所說的Just-In-Time Compiler(JIT)編譯器,Dalvik使用JIT進行編譯,JIT可以對經(jīng)常使用的dex/odex進行編譯和優(yōu)化,將其翻譯成精簡的Native Code執(zhí)行,引入JIT之后Dalvik性能提升了3到6倍。
2013年10月31日,Google正式對外發(fā)布代號為Kitkat的Android4.4,Google為了改善Android糟糕的用戶體驗,開發(fā)了全新的虛擬機運行環(huán)境,也就是Android Runtime(ART),在這個版本中Google還有了新的編譯策略Ahead of time(AOT),不過這時候ART和Dalvik共存,直到2014年10月16日代號為Lollipop棒棒糖的Android5.0版本,ART徹底取代Dalvik,AOT成為了唯一的編譯模式手機系統(tǒng),AOT相對于JIT的優(yōu)點是,JIT是運行時動態(tài)編譯,每次運行程序的時候都要編譯,AOT則是靜態(tài)編譯,應(yīng)用在安裝的時候就已經(jīng)完成了編譯,程序運行的時候不用重新編譯手機系統(tǒng),這才是真正的本地應(yīng)用概念。
ART還對垃圾回收機制進行了改革,ART只有一次垃圾回收暫停、而Dalvik有兩次,ART在垃圾回收保持暫停的時候并行處理,ART還優(yōu)化了垃圾回收的效率,讓系統(tǒng)能夠及時垃圾回收、及時減少后臺內(nèi)存使用和碎片化問題。
不過在Android7.0之后JIT又重新回歸了,AOT/JIT混合編譯模式又重新回歸了,混合編譯當然有優(yōu)點,不過還是很難解決Android存在的各種問題,畢竟Android的問題一大部分是Java自身的問題,除此之外Android生態(tài)本身也比較混亂,這也是Android體驗差的重要原因之一。