Android中的Dalvik和ART詳解及區(qū)別分析
要想知道Dalvik和ART區(qū)別分析,首先我們要分別知道這兩者是什么?
什么是Dalvik?
Dalvik是Google公司自己設計用于Android平臺的虛擬機。
Dalvik虛擬機是Google等廠商合作開發(fā)的Android移動設備平臺的核心組成部分之一。
它可以支持已轉換為 .dex格式的Java應用程序的運行,.dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統(tǒng)。
Dalvik 經(jīng)過優(yōu)化,允許在有限的內存中同時運行多個虛擬機的實例,并且每一個Dalvik 應用作為一個獨立的Linux 進程執(zhí)行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。
很長時間以來,Dalvik虛擬機一直被用戶指責為拖慢安卓系統(tǒng)運行速度不如IOS的根源。
2014年6月25日,Android L 正式亮相于召開的谷歌I/O大會,Android L 改動幅度較大,谷歌將直接刪除Dalvik,代替它的是傳聞已久的ART。
什么是ART?
即Android Runtime
ART 的機制與 Dalvik 不同。在Dalvik下,應用每次運行的時候,字節(jié)碼都需要通過即時編譯器(just in time ,JIT)轉換為機器碼,這會拖慢應用的運行效率,而在ART 環(huán)境中,應用在第一次安裝的時候,字節(jié)碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啟動(首次)和執(zhí)行都會變得更加快速。
下面是區(qū)別分析
Dalvik和JVM有啥關系?
主要區(qū)別:
Dalvik是基于寄存器的,而JVM是基于棧的。
Dalvik運行dex文件,而JVM運行java字節(jié)碼
自Android 2.2開始,Dalvik支持JIT(just-in-time,即時編譯技術)。
優(yōu)化后的Dalvik較其他標準虛擬機存在一些不同特性:
1.占用更少空間
2.為簡化翻譯,常量池只使用32位索引
3.標準Java字節(jié)碼實行8位堆棧指令,Dalvik使用16位指令集直接作用于局部變量。局部變量通常來自4位的“虛擬寄存器”區(qū)。這樣減少了Dalvik的指令計數(shù),提高了翻譯速度?!?br />
當Android啟動時,Dalvik VM 監(jiān)視所有的程序(APK),并且創(chuàng)建依存關系樹,為每個程序優(yōu)化代碼并存儲在Dalvik緩存中。Dalvik第一次加載后會生成Cache文件,以提供下次快速加載,所以第一次會很慢。
Dalvik解釋器采用預先算好的Goto地址,每個指令對內存的訪問都在64字節(jié)邊界上對齊。這樣可以節(jié)省一個指令后進行查表的時間。為了強化功能, Dalvik還提供了快速翻譯器(Fast Interpreter)。
一般來說,基于堆棧的機器必須使用指令才能從堆棧上的加載和操作數(shù)據(jù),因此,相對基于寄存器的機器,它們需要更多的指令才能實現(xiàn)相同的性能。但是基于寄存器機器上的指令必須經(jīng)過編碼,因此,它們的指令往往更大。
Dalvik虛擬機既不支持Java SE 也不支持Java ME類庫(如:Java類,AWT和Swing都不支持)。 相反,它使用自己建立的類庫(Apache Harmony Java的一個子集)。
ART有什么優(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.應用的安裝時間會變長。
tips:現(xiàn)在智能手機大部分都可以讓用戶選擇使用Dalvik還是ART模式。當然默認還是使用Dalvik模式。
用法:設置-輔助功能-開發(fā)者選項(開發(fā)人員工具)-選擇運行環(huán)境(不同的手機設置的步驟可能不一樣)。
Dalvik和ART的幾點區(qū)別
dalvik是執(zhí)行的時候編譯+運行,安裝比較快,開啟應用比較慢,應用占用空間小
ART是安裝的時候就編譯好了,執(zhí)行的時候直接就可以運行的,安裝慢,開啟應用快,占用空間大
用個比喻來說就是,騎自行車
dalvik 是已經(jīng)折疊起來的自行車,每次騎都要先組裝自行車才能騎
ART 是已經(jīng)組裝好的自行車,每次騎直接上車就能走人
相關文章
Android中Activity之間跳轉和參數(shù)傳遞的實例
本篇文章主要介紹了Android中Activity之間跳轉和參數(shù)傳遞的實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
android教程之使用popupwindow創(chuàng)建菜單示例
這篇文章主要介紹了android使用popupwindow創(chuàng)建菜單的示例,需要的朋友可以參考下2014-02-02
Android實現(xiàn)點擊Button產(chǎn)生水波紋效果
這篇文章主要介紹了Android實現(xiàn)點擊Button產(chǎn)生水波紋效果,需要的朋友可以參考下2016-01-01
教你制作Android中炫酷的ViewPagerIndicator(不僅仿MIUI)
ViewPagerIndicator作為一款分頁指標小部件兼容ViewPager,封裝上做得非常不錯,目前已為眾多知名應用所使用。今天給你大家分享一個炫酷的效果,有需要的可以參考學習。2016-08-08
Android Studio三方引用報錯但是項目可以運行的解決方案
今天小編就為大家分享一篇關于Android Studio三方引用報錯但是項目可以運行的解決方案,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
Android的OkHttp包中的HTTP攔截器Interceptor用法示例
攔截器是OkHttp處理HTTP請求方面所具有的一個強大特性,這里我們就來看一下Android的OkHttp包中的HTTP攔截器Interceptor用法示例,需要的朋友可以參考下2016-07-07
Android編程使用AlarmManager設置鬧鐘的方法
這篇文章主要介紹了Android編程使用AlarmManager設置鬧鐘的方法,結合具體實例分析了Android基于AlarmManager實現(xiàn)鬧鐘功能的設置、取消、顯示等相關操作技巧,需要的朋友可以參考下2017-03-03

