Android系統(tǒng)Dalvik虛擬機與Java虛擬機的區(qū)別
- 作者:新網(wǎng)
- 來源:新網(wǎng)
- 瀏覽:100
- 2018-05-02 17:49:25
Dalvik虛擬機作為Android平臺的核心組件,擁有如下幾個特點:體積小,占用內(nèi)存空間小;專有的DEX可執(zhí)行文件格式,體積更小,執(zhí)行速度更快;常量池采用32位索引值,尋址類方法名、字段名、常量更快; 基于寄存器架構(gòu),并擁有一套完整的指令系統(tǒng).
Dalvik虛擬機作為Android平臺的核心組件,擁有如下幾個特點:體積小,占用內(nèi)存空間小;專有的DEX可執(zhí)行文件格式,體積更小,執(zhí)行速度更快;常量池采用32位索引值,尋址類方法名、字段名、常量更快; 基于寄存器架構(gòu),并擁有一套完整的指令系統(tǒng).
<
div> 提供了對象生命周期管理、堆棧管理、線程管理、安全和異常管理以及垃圾回收等重要功能;
所有的Android程序都運行在Android系統(tǒng)進程里,每個進程對應(yīng)著一個Dalvik虛擬機實例。
Dalvik虛擬機與Java虛擬機的區(qū)別
Dalvik虛擬機與傳統(tǒng)的Java虛擬機有許多不同點,兩者并不兼容,它們顯著的不同主要表現(xiàn)在以下幾個方面:
1.Java虛擬機運行的是Java字節(jié)碼,Dalvik虛擬機運行的是Dalvik字節(jié)碼。
傳統(tǒng)的Java程序經(jīng)過編譯,生成Java字節(jié)碼保存在class文件中,Java虛擬機通過解碼class文件中的內(nèi)容來運行程序。而Dalvik虛擬機運行的是Dalvik字節(jié)碼,所有的Dalvik字節(jié)碼由Java字節(jié)碼轉(zhuǎn)換而來,并被打包到一個DEX(Dalvik Executable)可執(zhí)行文件中。Dalvik虛擬機通過解釋DEX文件來執(zhí)行這些字節(jié)碼。
2.Dalvik可執(zhí)行文件體積更小。
Android SDK中有一個叫dx的工具負責(zé)將Java字節(jié)碼轉(zhuǎn)換為Dalvik字節(jié)碼。dx工具會對Java類文件重新排列,消除在類文件中出現(xiàn)的所有冗余信息,避免虛擬機在初始化時出現(xiàn)重復(fù)的文件加載與解析過程。一般情況下,Java類文件中包含多個不同的方法簽名,如果其他的類文件引用該類文件中的方法,方法簽名也會被復(fù)制到其類文件中,也就是說多個不同的類會同時包含相同的方法簽名,同樣地,大量的字符串常量在多個類文件中也被重復(fù)使用,這些冗余信息會直接增加文件的體積,同時也會嚴重影響虛擬機解析文件的效率。dx工具針對這個問題專門做了處理,它將所有的Java類文件中的常量池進行分解,消除其中的冗余信息,重新組合形成一個常量池,所有的類文件共享一個常量池。
3.Java虛擬機與Dalvik虛擬機架構(gòu)不同。
Java虛擬機基于棧結(jié)構(gòu),程序在運行時虛擬機需要頻繁的從棧上讀取或?qū)懭霐?shù)據(jù),這個過程需要更多的指令分派與內(nèi)存訪問次數(shù),會耗費不少CPU時間,對于像手機設(shè)備資源有限的設(shè)備來說,這是相當大的一筆開銷。
Dalvil虛擬機基于寄存器架構(gòu),數(shù)據(jù)的訪問通過寄存器直接傳遞,這樣的訪問方式比基于棧方式要快很多。