轉載請注明出處:https://www.niwoxuexi.com/blog/android/article/201.html
2014年6月谷歌I/O大會,Android L 改動幅度較大,Google將直接放棄Dalvik虛擬機,代替它的是傳聞已久的ART(Android Runtime)。什么是ART?,google為什么棄用Dalvik虛擬機?要想回答這些問題,還需要先了解什么是虛擬機、什么是JVM(java 虛擬機)的概念。
一、什么是虛擬機?
官方語言:虛擬機(Virtual Machine)指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng)。
解釋:用軟件模擬出來的一個計算機系統(tǒng)。這些虛擬機完全就像真正的計算機那樣進行工作,例如你可以安裝操作系統(tǒng)、安裝應用程序、訪問網(wǎng)絡資源等等
虛擬機分兩種:系統(tǒng)虛擬機和進程虛擬機
1,系統(tǒng)虛擬機
解釋:提供一個系統(tǒng)的仿真和抽象
平時用的VM Ware,或者VirtualBox 等屬于系統(tǒng)虛擬機。能夠仿真出一個機器??稍谏厦媾躸buntu,小紅帽的系統(tǒng)
2,進程虛擬機
解釋:只提供一個進程的仿真和抽象
我們下面講得Dalvik,和JVM都是進程虛擬機
例如:Dalvik, JVM(java Virtual Machine),Microsoft.NET
二、什么是JVM(Java虛擬機)
官方語言:JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規(guī)范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。
解釋:其實就是上面講到的進程虛擬機
我們下看一下jvm的工作流程

java代碼用javac編譯成bytecode文件,通過虛擬機可以編譯成各種平臺的匯編語言
所以:虛擬機的好處,write once,compile once,run everywhere
三、什么是Dalvik
官方語言:Dalvik是Google公司自己設計用于Android平臺的虛擬機。Dalvik虛擬機是Google等廠商合作開發(fā)的Android移動設備平臺的核心組成部分之一。它可以支持已轉換為 .dex(即Dalvik Executable)格式的Java應用程序的運行,.dex格式是專為Dalvik設計的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。Dalvik 經(jīng)過優(yōu)化,允許在有限的內(nèi)存中同時運行多個虛擬機的實例,并且[1] 每一個Dalvik 應用作為一個獨立的Linux 進程執(zhí)行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。
解釋:Dalvik是Google專門為Android平臺定制的虛擬機。主要是對內(nèi)存,CPU,電源等模塊進行了優(yōu)化
四、最好解釋 ART(Android Runtime)
ART 的機制與 Dalvik 不同。在Dalvik下,應用每次運行的時候,字節(jié)碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的運行效率,而在ART 環(huán)境中,應用在第一次安裝的時候,字節(jié)碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啟動(首次)和執(zhí)行都會變得更加快速
解釋:ART完全改變了這種做法,在應用安裝時就預編譯字節(jié)碼到機器語言,在移除解釋代碼這一過程后,應用程序執(zhí)行將更有效率,啟動更快。
Dalvik是Google公司自己設計用于Android平臺的虛擬機。Dalvik經(jīng)過優(yōu)化,使其更適合android平臺。具體優(yōu)點會在下面和JVM進行比較時說明。
四、ART和Dalvik相比優(yōu)缺點
優(yōu)點:
1、系統(tǒng)性能的顯著提升。
2、應用啟動更快、運行更快、體驗更流暢、觸感反饋更及時。
3、更長的電池續(xù)航能力。
4、支持更低的硬件。
缺點:
1.機器碼占用的存儲空間更大,字節(jié)碼變?yōu)闄C器碼之后,可能會增加10%-20%(不過在應用包中,可執(zhí)行的代碼常常只是一部分。比如最新的 Google+ APK 是 28.3 MB,但是代碼只有 6.9 MB。)
2.應用的安裝時間會變長。著作權歸作者所有。
總的來說,ART 的優(yōu)點還是遠遠超越其缺點的。畢竟,影響用戶體驗的要素中,電池續(xù)航和應用順暢運行更為重要。在于2014 年 10 月 15 日發(fā)布的全新 Android 操作系統(tǒng)Android 5.0上,Dalvik徹底被ART取代了!