Dalvik虛擬機

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
Dalvik
原作者Dan Bornstein
源代碼庫 編輯維基數據鏈接
操作系統Linux
平台Android
類型虛擬機
許可協議Apache License 2.0
網站https://source.android.com/devices/tech/dalvik/index.html
Dalvik執行文件
副檔名
.dex

Dalvik虛擬機,是Google等廠商合作開發的Android移動設備平台的核心組成部分之一。它可以支持已轉換為.dex(即「Dalvik Executable」)格式的Java應用程序的運行。.dex格式是專為Dalvik設計的一種壓縮格式,適合內存處理器速度有限的系統。Dalvik由Dan Bornstein編寫的,名字來源於他的祖先曾經居住過的小漁村達爾維克Dalvík),位於冰島埃亞峽灣

大多數虛擬機包括JVM都是一種堆疊機器,而Dalvik虛擬機則是寄存器機。兩種架構各有優劣,一般而言,基於堆疊的機器需要更多指令,而基於寄存器的機器指令更長。

Android 5.0版起,Android Runtime(ART)取代Dalvik成為系統內預設虛擬機。

架構

dx工具是一種用來轉換Java class成為DEX格式的工具。多個類被包含在一個dex文件之中。各個類中重複的字串和其他常數只在DEX中存放一次,以節省空間。Java字節碼(bytecode)被轉換成Dalvik虛擬機所使用的替代指令集。一個未壓縮dex文件通常稍小於一個已經壓縮的.jar檔。

安裝到行動設備之時,Dalvik可執行檔可能會被修改。為了獲得進一步優化,虛擬機可能會調整文件內部分數據的端序內聯一些函數和簡單的結構體、並短路掉一些不必要的操作。

當Android啟動時,Dalvik VM監視所有的程序(APK),並且創建依存關係樹,為每個程序優化代碼並存儲在Dalvik緩存中。Dalvik第一次加載後會生成Cache文件,以提供下次快速加載,所以第一次會很慢。

Dalvik直譯器採用預先算好的Goto位址,每個指令對內存的訪問都在64字節邊界上對齊。這樣可以節省一個指令後進行查表的時間。為了強化功能, Dalvik還提供了快速翻譯器(Fast Interpreter)。[來源請求]

dx

dx是一套工具,可以將Java .class轉換成.dex格式。一個dex檔通常會有多個.class。由於dex有時必須進行優化,會使檔案大小增加1-4倍,以ODEX結尾。

差異

  • Dalvik虛擬機早期並沒有使用即時編譯(JIT)技術。從Android 2.2開始,Dalvik虛擬機也支持JIT。
  • Dalvik虛擬機有自己的字節碼,並非使用Java字節碼。
  • Dalvik基於暫存器,而JVM基於堆疊。
  • Dalvik VM透過Zygote進行類別的預加載,Zygote會完成虛擬機的初始化,也是與JVM不同之處。

參考資料