(1)概念介紹
前文已經介紹了JVM相關的知識,這裡重點介紹Android虛拟機。
在Android的體系架構中有一部分叫做Android Runtime,即Android運作時環境,這個環境包括了兩個部分,一個是Android的核心類庫,還有一個就是Dalvik虛拟機了。
Android之是以開發Dalvik虛拟機而不使用JAVA自帶的JVM可能是基于以下兩點考慮:
- 版權問題:如果使用JVM就涉及到了版權問題,是以google需要在JVM的基礎上做一些改進,創造自己的虛拟機。
- 性能問題:jvm虛拟機對Java開發來說性能已經足夠了,但是相對移動平台的特性,比如低記憶體,低電量等,就顯得有些牽強了,是以為了優化虛拟機的工作效率,google開發了android自己的虛拟機。
(2)JVM和Dalvik差別
JAVA虛拟機運作的是JAVA位元組碼,Dalvik虛拟機運作的是Dalvik位元組碼
- java虛拟機:JAVA->class檔案
- dalvik虛拟機:JAVA->class檔案->Dalvik位元組碼->打包到dex中->DVM通過解釋DEX檔案來執行這些位元組碼。
這裡的dex檔案是安卓系統的可執行檔案,可以進一步将dex提取成odex,odex就相當于預讀dex,會占用更多記憶體,但是程式運作速度也會加快。
(3)Dalvik和ART差別
從Android 5.0(version 21)版起,Android Runtime(ART)取代Dalvik成為系統内預設虛拟機。
(1)概念
- Dalvik虛拟機:它可以支援已轉換為.dex(即“Dalvik Executable”)格式的Java應用程式的運作。.dex格式是專為Dalvik設計的一種壓縮格式,适合記憶體和處理器速度有限的系統。
- ART:Android Runtime (ART) 是一種在Android作業系統上的運作環境,ART能夠在第一次安裝的時候,把應用程式的位元組碼轉換為機器碼。采用了預編譯(AOT,Ahead-Of-Time)技術。
(2)差別:
- Dalvik環境下:程式每次運作的時候,位元組碼都需要通過即時編譯器(just in time ,JIT)轉換為機器碼,這樣會導緻應用的啟動時間變慢。(安裝速度更快,位元組碼比機器碼要小)
- ART環境下:程式在第一次安裝的時候,位元組碼就會預編譯(Ahead-Of-Time,AOT)成機器碼,這樣的話,雖然裝置和應用的首次啟動會變慢,但是以後每次啟動執行的時候,都可以直接運作,是以運作效率會提高。
(4)ART的優缺點
(1)優點
- 系統性能的顯著提升
- 應用啟動更快、運作更快、體驗更流暢、觸感回報更及時
- 更長的電池續航能力
- 支援更低的硬體
(2)缺點
- 位元組碼變為機器碼之後,占用的存儲空間更大
- 應用的安裝時間會變長