首頁技術(shù)文章正文

Java虛擬機和Dalvik虛擬機有哪些區(qū)別和不同?

更新時間:2023-07-06 來源:黑馬程序員 瀏覽量:

IT培訓班

Dalvik是Google公司自己設(shè)計的用于Android平的虛擬機,它可以簡單地完成進程隔離和線程管理,并且可以提高內(nèi)存的使用效率。每一個Android應用程序在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解析下得以執(zhí)行。

很多人都認為Dalvik虛擬機是一個Java虛擬機,因為Android開發(fā)的編程語言恰恰是Java語言,但是這種說法并不準確。Dalvik虛擬機并不是按照Java虛擬機的規(guī)范來實現(xiàn)的,兩者不兼容,而且也有很多不同之處。下面通過一個圖進行對比說明,如下所示。

Java虛擬機和Dalvik虛擬機的區(qū)別

Java 虛擬機和Dalvik虛擬機

從圖中可以看出,Java虛擬機和Dalvik虛擬機主要有兩大區(qū)別:一是它們編譯后的文件不同;二是它們基于的架構(gòu)不同。具體如下:

1.編譯后的文件不同

Java 虛擬機運行的是.class字節(jié)碼文件,而 Dalvik 虛擬機運行的則是其專有的.dex文件。在Java程序中Java類會被翻譯成一個或者多個字節(jié)碼文件(.class)然后打包到.jar文件,之后Java虛擬機會從相應的.class文件和.jar文件中獲取相應的字節(jié)碼。Android程序雖然也是使用Java語言進行編程,但是在翻譯成.class文件后,還會通過工具將所有的.class文件轉(zhuǎn)換成一個.dex文件,然后Dalvik虛擬機從其中讀取指令和數(shù)據(jù),最后的.odex是為了在運行過程中進一步提高性能而對.dex文件進行的進一步優(yōu)化,能加快軟件的加載速度和開啟速度。

2.基于的架構(gòu)不同

Java虛擬機是基于棧的架構(gòu),大家知道,棧是一個連續(xù)的內(nèi)存空間,取出和存入的速度比較慢;而Dalvik是基于寄存器的架構(gòu),寄存器是CPU上的一塊緩存,寄存器的存取速度要比從內(nèi)存中存取的速度快很多,這樣就可以根據(jù)硬件最大限度地優(yōu)化設(shè)備,更適合移動設(shè)備的使用。

需要說明的是,Android系統(tǒng)下的Dalvik虛擬機默認給每一個應用程序最多分配16 MB內(nèi)存,如果Android加載的資源超過這個值,就會報出OutOfMemoryError異常,因此一定要注意這個問題。


分享到:
在線咨詢 我要報名
和我們在線交談!