Dalvik源碼分析(一)虛擬機概述

Dalvik是Google公司本身設計用於Android平臺的Java虛擬機。Dalvik虛擬機是Google等廠商合做開發的Android移動設備平臺的核心組成部分之一。Dalvik 通過優化,容許在有限的內存中同時運行多個虛擬機的實例,而且每個Dalvik 應用做爲一個獨立的Linux 進程執行。獨立的進程能夠防止在虛擬機崩潰的時候全部程序都被關閉。 java

 

主要功能: 性能


Dalvik功能圖 優化

Dalvik的主要做用是將java SDK 編譯的.class文件編譯成.dex文件,而後加載須要的類進行解釋執行。同時對進程及內存進行管理。 spa

 

Dalvik VM作了大量的優化,包括以下方面: 設計

(1)Dex文件鏡像格式採用了內容壓縮技術。將多個class中的內容統一歸類存儲,即將方法、屬性、字符串、類型均抽取出來統一存放,這樣可使全部重複的內容僅出現一次,經過引用(id)來訪問。這種技術比JVM中基於zip的壓縮技術更高。雖然壓縮後的大小差很少,可是內容壓縮無需解壓縮,所以能夠有效減小程序的啓動時間。 進程

(2)用Zygote統一管理VM。Android中全部應用均對應了一個VM,可是這些VM和JVM的使用方式不一樣,這些VM共享了應用程序中的系統代碼和數據,這就相似OS中的動態Lib管理那樣,一樣的內容僅被加載一次,而一旦系統數據須要被某個應用修改時,則採用Copy-On-Write技術保證最少的性能開銷。 這種技術不會形成Windows中的「Dll Hell」問題,由於系統庫均爲Dalvik提供,不會存在版本問題。可是隨着應用的發展,可能會逐步出現可重用的Lib,那個時候就會有Windows曾經面臨的痛苦了。 ip

(3)Register-based VM。這個和JVM這種Stack-based VM有較大的不一樣。後者基於堆棧執行程序,雖然每一個指令字較短,可是指令執行時卻一般須要加載數據到堆棧,這就帶來了更多的內存訪問和更多的指令。雖然因爲指令字較短,最終的程序文件大小並不比基於寄存器的程序更大。而基於寄存器的VM一般指令字較長,可是操做數一般在寄存器中,這樣就提升了執行的速度。 內存

相關文章
相關標籤/搜索