區別DVM與JVM
1.首要差別
Dalvik: 基於寄存器,編譯和運行都會更快些
JVM: 基於棧, 編譯和運行都會慢些
2.字節碼的區別
Dalvik: 執行.dex格式的字節碼,是對.class文件進行壓縮后產生的,文件變小
JVM: 執行.class格式的字節碼
3.運行環境的區別
Dalvik : 一個應用啟動都運行一個單獨的虛擬機運行在一個單獨的進程中
JVM: 只能運行一個實例, 也就是所有應用都運行在同一個JVM中
JVM和DVM的區別
- DVM是Dalvik Virtual Machine的縮寫,是安卓虛擬機的縮寫(為什么不叫AVM-Android Virtual Machine呢?原因是其作者以其祖上居住過的名為Dalvik的村子命名)。
- DVM是針對JVM(Java Virtual Machine)而言的,因為JVM是Oracle公司(原SUN公司)的產品,擔心版權的問題,既然Java是開源的,索性就研究了JVM,寫出了DVM
- JVM和DVM的主要區別如下:
a) 執行的直接碼文件不一樣
Java
.java文件 -> .class文件 -> .jar文件
Android
.java文件 –> .class文件 -> .dex文件

如上圖所示,.jar文件里面包含多個.class文件,每個.class文件里面包含了該類的頭信息(如編譯版本)、常量池、類信息、域、方法、屬性等等,當JVM加載該.jar文件的時候,會加載里面的所有的.class文件,這樣會很慢,而移動設備的內存本來就很小,不可能像JVM這樣加載,所以它使用的不是.jar文件,而是.apk文件,該文件里面只包含了一個.dex文件,這個.dex文件里面將所有的.class里面所包含的信息全部整合在一起了,這樣再加載就很快了。.class文件存在很多的冗余信息,dex工具會去除冗余信息,並把所有的.class文件整合到.dex文件中。減少了I/O操作,提高了類的查找速度.南京寶雲java安卓課程打架報名啦!
b) 基於的架構不一樣
Java基於棧的架構.棧是內存上面的一段連續的存儲空間
Android基於寄存器的架構.寄存器是CPU上面的一塊存儲空間
所以,CPU直接訪問自己上面的一塊空間的數據的效率肯定要大於訪問內存上面的數據
