1、什麼是Dalvik虛擬機java
Dalvik是Google公司本身設計用於Android 平臺的Java虛擬機,具備高效、簡潔、節省資源的特色,從Android系統架構圖知,Dalvik虛擬機運行在Android的運行時庫層安全
Dalvik做爲面向Linux、爲嵌入式操做系統設計的虛擬機,主要負責完成對象生命週期管理、堆棧管理、線程管理、安全和異常管理,以及垃圾回收等。架構
2、Dalvik虛擬機的特色app
3、Dalvik虛擬機和Java虛擬機的區別工具
Java虛擬機運行的是Java字節碼,Dalvik虛擬機運行的Dalvik字節碼ui
傳統的Java程序通過編譯,生成Java字節碼保存在class文件中,Java虛擬機經過解碼class文件中的內容運行程序。 而Dalvik虛擬機運行的是Dalvik字節碼,全部的Dalvik字節碼由Java字節碼轉換而來,並被打包到一個dex文件中,Dalvik虛擬機經過解析dex文件來執行這些字節碼。操作系統
Dalvik可執行文件體積小,Android SDK中有一個叫dx的工具負責將Java字節碼轉換成Dalvik字節碼。線程
dx工具對Java類文件從新排列,消除在文件中出現的全部的冗餘信息,避免虛擬機在初始化時出現反覆的文件加載和解析過程。 通常狀況下,Java類文件中包含多個不一樣的方法簽名,若是其餘的類文件引用該類文件中的防範, 方法簽名也會被複制到其餘類文件中,也就是說, 多個不一樣的類會同時包含相同的方法簽名,一樣的,大量的字符串常量在多個類文件中也會被重複使用,這些冗餘信息會直接增長文件的體積,同時也會影響虛擬機解析文件的效率。消除其中的冗餘信息,從新組合成一個常量池,全部的類文件共享一個常量池,因爲dx工具對常量池的壓縮,使得相同的字符串,常量在dex文件中只出現一次,從而減少了文件的體積。設計
Java虛擬機與Dalvik虛擬機架構不一樣。這也是它們之間最大的區別。3d
4、Dalvik虛擬機結構
5、Android APK 編譯打包流程
總結:編譯-> Dex -> 打包 -> 簽名和對齊