天天看點

Android ART虛拟機和Dalvik虛拟機差別

Android 從5.0開始預設使用ART虛拟機執行程式,抛棄了Dalvik虛拟機.加快了Android的運作效率,提高系統的流暢性

原因是Dalvik虛拟機執行的是dex位元組碼,ART虛拟機執行的是本地機器碼, Dalvik虛拟機有一個解釋器,用來執行dex位元組碼, Android從2.2開始,通過JIT(Just-In-Time)進行Dalvik虛拟機的優化,将使用頻率較高的位元組碼翻譯成機器碼,就可以有效地提高Dalvik虛拟機的執行效率。但即使用采用了JIT,Dalvik虛拟機還是比不上ART虛拟機,因為Dalvik翻譯工作是在程式運作時的,而ART在APK在安裝時就對其包含的Dex位元組碼進行翻譯,得到對應的本地機器指令,于是就可以在運作時直接執行了。

安裝:

Android系統通過PackageManagerService來安裝APK,在安裝的過程,PackageManagerService會通過另外一個類Installer的成員函數dexopt來對APK裡面的dex位元組碼進行優化,對Dalvik虛拟機來說隻進行dex位元組碼的優化,而ART虛拟機将dex位元組碼翻譯成本地機器碼,注意的是兩種虛拟機不管事位元組碼的優化還是翻譯成機器碼都會生成一個字尾是odex檔案,隻不過ART的是一個oat類型檔案,什麼是oat檔案(不清楚,好像是Linux的檔案)

啟動:

Android系統在啟動的時候,會建立一個Zygote(受精卵,)程序,一切程序産生的一個程序。Zygote程序在啟動的過程中會建立一個Dalvik虛拟機(或是ART虛拟機)。Zygote程序是通過複制自己來建立新的應用程式程序的,他會連同虛拟機一并複制可以大大提高系統的啟動速度,就像單例一樣,不用再為每個程序new一個,而且每個應用程序所需要的虛拟機也都是直接拿來就可以了.