更新時間:2023-07-06 來源:黑馬程序員 瀏覽量:
Dalvik是Google公司自己設計的用于Android平的虛擬機,它可以簡單地完成進程隔離和線程管理,并且可以提高內存的使用效率。每一個Android應用程序在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解析下得以執行。
很多人都認為Dalvik虛擬機是一個Java虛擬機,因為Android開發的編程語言恰恰是Java語言,但是這種說法并不準確。Dalvik虛擬機并不是按照Java虛擬機的規范來實現的,兩者不兼容,而且也有很多不同之處。下面通過一個圖進行對比說明,如下所示。
Java 虛擬機和Dalvik虛擬機
從圖中可以看出,Java虛擬機和Dalvik虛擬機主要有兩大區別:一是它們編譯后的文件不同;二是它們基于的架構不同。具體如下:
1.編譯后的文件不同
Java 虛擬機運行的是.class字節碼文件,而 Dalvik 虛擬機運行的則是其專有的.dex文件。在Java程序中Java類會被翻譯成一個或者多個字節碼文件(.class)然后打包到.jar文件,之后Java虛擬機會從相應的.class文件和.jar文件中獲取相應的字節碼。Android程序雖然也是使用Java語言進行編程,但是在翻譯成.class文件后,還會通過工具將所有的.class文件轉換成一個.dex文件,然后Dalvik虛擬機從其中讀取指令和數據,最后的.odex是為了在運行過程中進一步提高性能而對.dex文件進行的進一步優化,能加快軟件的加載速度和開啟速度。
2.基于的架構不同
Java虛擬機是基于棧的架構,大家知道,棧是一個連續的內存空間,取出和存入的速度比較慢;而Dalvik是基于寄存器的架構,寄存器是CPU上的一塊緩存,寄存器的存取速度要比從內存中存取的速度快很多,這樣就可以根據硬件最大限度地優化設備,更適合移動設備的使用。
需要說明的是,Android系統下的Dalvik虛擬機默認給每一個應用程序最多分配16 MB內存,如果Android加載的資源超過這個值,就會報出OutOfMemoryError異常,因此一定要注意這個問題。