天天看點

dvm和jvm了解

一、dvm和jvm的差別

1.差別一:

dvm執行的是.dex格式檔案 jvm執行的是.class檔案 android程式編譯完之後生産.class檔案,然後,dex工具會把.class檔案處理成.dex檔案,然後把資源檔案和.dex檔案等打包成.apk檔案。apk就是android package的意思。 jvm執行的是.class檔案。

2.差別二:

dvm是基于寄存器的虛拟機 而jvm執行是基于虛拟棧的虛拟機。寄存器存取速度比棧快的多,dvm可以根據硬體實作最大的優化,比較适合移動裝置。

3.差別三:

.class檔案存在很多的備援資訊,dex工具會去除備援資訊,并把所有的.class檔案整合到.dex檔案中。減少了I/O操作,提高了類的查找速度

二、Android DVM詳解

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使用者來運作以最大程度地保戶應用程式的安全性和獨立性

繼續閱讀