天天看點

Android虛拟機與Java虛拟機差別(二)

(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檔案來執行這些位元組碼。
Android虛拟機與Java虛拟機差別(二)

這裡的dex檔案是安卓系統的可執行檔案,可以進一步将dex提取成odex,odex就相當于預讀dex,會占用更多記憶體,但是程式運作速度也會加快。

Android虛拟機與Java虛拟機差別(二)

(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)缺點

  • 位元組碼變為機器碼之後,占用的存儲空間更大
  • 應用的安裝時間會變長

繼續閱讀