dalvik虛擬機是android應用程序運行在dalvik虛擬機里面的,并且每一個應用程序對應有一個單獨的dalvik虛擬機實例??梢约涌靉ndroid應用程序的啟動速度,感興趣的朋友可以來極光下載站下載!
dalvik是google公司自己設計用于android平臺的虛擬機。dalvik虛擬機是google等廠商合作開發的android移動設備平臺的核心組成部分之一。它可以支持已轉換為 .dex(即dalvik executable)格式的java應用程序的運行,.dex格式是專為dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。dalvik 經過優化,允許在有限的內存中同時運行多個虛擬機的實例,并且每一個dalvik 應用作為一個獨立的linux 進程執行。
基于堆棧的機器與基于寄存器的機器誰更有優勢一直是個爭論不休的話題。
一般來說,基于堆棧的機器必須使用指令才能從堆棧上的加載和操作數據,因此,相對基于寄存器的機器,它們需要更多的指令才能實現相同的性能。但是基于寄存器機器上的指令必須經過編碼,因此,它們的指令往往更大。這種差異主要是vm機對的操作碼調度造成的,它們往往比其他的因素昂貴,比如說及時匯編。
然而,2010年,在oracle公司(java技術的擁有者)嵌入式設備上的標準非圖形化性能測試表明,android 2.2(最初的版本包括一個即時編譯器)比java se嵌入式設備(兩者都基于 java se 6)慢2-3倍。
專有的dex文件格式
dex是dalvik虛擬機專用的文件格式,而問什么棄用已有的字節碼文件(class文件)而采用新的格式呢?
1.一個應用中會定義很多類,編譯完成后即會有很多相應的class文件,class文件間會有不少冗余的信息;而dex文件格式會把所有的class文件內容整合到一個文件中。這樣,除了減少整體的文件尺寸,i/o操作,也提高了類的查找速度。
2.增加了新的操作碼的支持
3.文件結構盡量簡潔,使用等長的指令,借以提高解析速度
4. 盡量擴大只讀結構的大小,借以提高跨進程的數據共享
如何生成dex文件呢?android系統和dalvik虛擬機提供了工具(dx),在把java源代碼編譯成class文件后,使用dx工具。
android應用開發和dalvik虛擬機
android應用所使用的編程語言是java語言,和java se一樣,編譯時使用sun jdk將java源程序編程成標準的java字節碼文件(.class文件),而后通過工具軟件dx把所有的字節碼文件轉成dex文件(classes.dex)。最后使用android打包工具(aapt)將dex文件,資源文件以及androidmanifest.xml文件(二進制格式)組合成一個應用程序包(apk)。應用程序包可以被發布到手機上運行。
網友評論
支持 (0 ) 回復