Android DVM(轉)

轉自:http://blog.csdn.net/virus026/archive/2010/12/19/6085779.aspx


Android 運行環境主要指的虛擬機技術——Dalvik。Android中的所有Java程序都是運行在Dalvik VM上的。Android上的每個程序都有自己的線程,DVM只執行.dex的Dalvik executable 文件。每個Android應用在底層都對應有一個獨立的DVM實例並在其解釋下執行。    


雖然DVM也是用Java編程語言,Dalvik虛擬機和一般JAVA虛擬機(Java VM)並不兼容,他們兩個的區別是JVM標準執行的是.class的字節碼(bytecode ),而是DVM執行的是其專有的(.dex)執行文件。在編譯過程中,Java把類編譯成一個或多個.class byte code 文件,然後打包到jar中,JVM會從中jar文件中獲得相應的.class文件和JRE字節碼。 Android VM雖然也是是用Java語言進行編程, Java程序通過編譯後,還需要通過SDK中的dex工具轉化成.dex格式,DVM再從其中讀取指令和數據。    


每一個應用程序即一個進程(Linux的一個Process)。二者最大的區別在於Java VM是以基於棧的虛擬機(Stack-based),而Dalvik是基於寄存器的虛擬機(Register-based)。顯然,後者最大的好處在於可以根據硬件實現更大的優化,這更適合移動設備的特點。     


DVM非常適合在移動終端上使用,與PC相比,它不需要很快的CPU和大量的內存空間. Google的測算顯示,64MB的內存已經能讓系統正常運轉了。其中24MB被用於底層系統的初始化和啓動。另外20MB被用於啓動高層服務。DVM有如下特徵:  
•使用專有的.dex格式。 

•原因是java類文件在編譯過後,會產生至少一個.class文件包含大量陳餘信息,dex文件格式會把所有的.class文件內容整合到一個.dex文件中。即減少了整體文件的尺寸和IO操作,也提高了類的查找速度。 

•增加了對新的操作碼的支持 

•文件結構儘量簡潔,使用等長的指令,藉以提高解析速度。 

•儘量擴大隻讀結構的大小,藉以提高跨進程的數據共享。 

•dex的優化,dex文件的結構是緊湊的,但是如果想提高運行時的性能,就需要對dex文件進行進一步的優化,這些優化針對以下幾個方面:

 •驗證dex文件中的所有類 

•對一些特定的類和方法裏面的操作碼進行優化 
•調整所有的字節序(Little_endian)和對齊結構中的每一個域 
•基於寄存器,基於寄存器的虛擬機雖然比基於堆棧的虛擬機在硬件,通用性上要差一些,但是它的代碼執行效率去更好 
•每一個Android應用都運行在它自己的DVM實例中,每一個DVM實例都是一個獨立的進程空間。所有的Android應用的線程都對應一個Linux線程,DVM因此可以更多地依賴操作系統的線程調度和管理機制。不同的應用在不同的進程空間裏運行,不同的應用都是用不同的Linux用戶來運行以最大程度地保戶應用程序的安全性和獨立性 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章