圖解Dalvik虛擬機(jī)相關(guān)配置
Google于2007年底正式發(fā)布了Android SDK, 作為 Android系統(tǒng)的重要特性,Dalvik虛擬機(jī)也***次進(jìn)入了人們的視野。它對內(nèi)存的高效使用,和在低速CPU上表現(xiàn)出的高性能,確實(shí)令人刮目相看。依賴于底層Posix兼容的操作系統(tǒng),它可以簡單的完成進(jìn)程隔離和線程管理。
每一個Android應(yīng)用在底層都會對應(yīng)一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例,其代碼在虛擬機(jī)的解釋下得以執(zhí)行。很多人認(rèn)為Dalvik虛擬機(jī)是一個Java虛擬機(jī)。因?yàn)锳ndroid的編程語言恰恰就是Java語言。但是這種說法并不準(zhǔn)確,因?yàn)镈alvik虛擬機(jī)并不是按照J(rèn)ava虛擬機(jī)的規(guī)范來實(shí)現(xiàn)的,兩者并不兼容;同時還有兩個明顯的不同:
Java虛擬機(jī)運(yùn)行的是Java字節(jié)碼,而Dalvik虛擬機(jī)運(yùn)行的則是其專有的文件格式DEX(Dalvik Executable)。
在Java SE程序中的Java類會被編譯成一個或者多個字節(jié)碼文件(.class)然后打包到JAR文件。
而后Java虛擬機(jī)會從相應(yīng)的CLASS文件和JAR文件中獲取相應(yīng)的字節(jié)碼;Android應(yīng)用雖然也是使用Java語言進(jìn)行編程,但是在編譯成CLASS文件后。還會通過一個工具(dx)將應(yīng)用所有的 CLASS文件轉(zhuǎn)換成一個DEX文件,而后Dalvik虛擬機(jī)會從其中讀取指令和數(shù)據(jù)。
如圖所示,Android運(yùn)行庫包括兩部分:核心庫和Dalvik虛擬機(jī)。核心庫包括了最基本的類庫,如data structure, network, Utilities, File system等的。很多實(shí)現(xiàn)代碼都是來自Apache Harmony 項(xiàng)目,主要目的是保證虛擬機(jī)的類庫能夠和Java SE的類庫***可能的兼容。
從而降低應(yīng)用開發(fā)者從Java SE陣營轉(zhuǎn)移到Android開發(fā)陣營的難度,增加其可用性。Dalvik虛擬機(jī)主要是完成對象生命周期的管理,堆棧的管理,線程管理,安全和異常的管理,以及垃圾回收等等重要功能。
如圖所示,Android運(yùn)行庫包括兩部分:核心庫和Dalvik虛擬機(jī)。核心庫包括了最基本的類庫,如data structure, network, Utilities, File system等的,很多實(shí)現(xiàn)代碼都是來自Apache Harmony 項(xiàng)目。
主要目的是保證虛擬機(jī)的類庫能夠和Java SE的類庫***可能的兼容,從而降低應(yīng)用開發(fā)者從Java SE陣營轉(zhuǎn)移到Android開發(fā)陣營的難度,增加其可用性。Dalvik虛擬機(jī)主要是完成對象生命周期的管理,堆棧的管理,線程管理,安全和異常的管理,以及垃圾回收等等重要功能。
【編輯推薦】