1. 程式人生 > >Dalvik虛擬機器與JVM的區別

Dalvik虛擬機器與JVM的區別

1.java虛擬機器執行的是Java位元組碼,Dalvik虛擬機器執行的是Dalvik位元組碼;傳統的Java程式經過編譯,生成Java位元組碼儲存在class檔案中,java虛擬機器通過解碼class檔案中的內容來執行程式。而Dalvik虛擬機器執行的是Dalvik位元組碼,所有的Dalvik位元組碼由Java位元組碼轉換而來,並被打包到一個DEX(Dalvik Executable)可執行檔案中Dalvik虛擬機器通過解釋Dex檔案來執行這些位元組碼。

2.Dalvik可執行檔案體積更小。SDK中有一個叫dx的工具負責將java位元組碼轉換為Dalvik位元組碼。

3.java虛擬機器與Dalvik虛擬機器架構不同。java虛擬機器基於棧架構。程式在執行時虛擬機器需要頻繁的從棧上讀取或寫入資料。這過程需要更多的指令分派與記憶體訪問次數,會耗費不少CPU時間,對於像手機裝置資源有限的裝置來說,這是相當大的一筆開銷。Dalvik虛擬機器基於暫存器架構,資料的訪問通過暫存器間直接傳遞,這樣的訪問方式比基於棧方式快的多.

記憶體和暫存器的區別
暫存器是CPU裡的東西,記憶體是掛在CPU外面的資料匯流排上的,訪問記憶體時要在CPU的暫存器填上地址,再執行相應的彙編指令,這時CPU會在資料匯流排上生成讀取或寫入記憶體資料的時鐘訊號,最終記憶體的內容會被CPU暫存器的內容更新(寫入)或被讀入CPU的暫存器(讀取)
不只是PC上的CPU,所有的嵌入式CPU,微控制器都一個樣