1.java虛擬機運行的是Java字節碼,Dalvik虛擬機運行的是Dalvik字節碼;傳統的Java程序通過編譯,生成Java字節碼保存在class文件中,java虛擬機經過解碼class文件中的內容來運行程序。而Dalvik虛擬機運行的是Dalvik字節碼,全部的Dalvik字節碼由Java字節碼轉換而來,並被打包到一個DEX(Dalvik Executable)可執行文件中Dalvik虛擬機經過解釋Dex文件來執行這些字節碼。java
2.Dalvik可執行文件體積更小。SDK中有一個叫dx的工具負責將java字節碼轉換爲Dalvik字節碼。架構
3.java虛擬機與Dalvik虛擬機架構不一樣。java虛擬機基於棧架構。程序在運行時虛擬機須要頻繁的從棧上讀取或寫入數據。這過程須要更多的指令分派與內存訪問次數,會耗費很多CPU時間,對於像手機設備資源有限的設備來講,這是至關大的一筆開銷。Dalvik虛擬機基於寄存器架構,數據的訪問經過寄存器間直接傳遞,這樣的訪問方式比基於棧方式快的多.工具