Android——區別DVM與JVM (2)


區別DVM與JVM

 

1.首要差別

Dalvik: 基於寄存器,編譯和運行都會更快些

JVM: 基於棧, 編譯和運行都會慢些

2.字節碼的區別

Dalvik: 執行.dex格式的字節碼,是對.class文件進行壓縮后產生的,文件變小

JVM: 執行.class格式的字節碼

3.運行環境的區別    

Dalvik : 一個應用啟動都運行一個單獨的虛擬機運行在一個單獨的進程中

JVM: 只能運行一個實例, 也就是所有應用都運行在同一個JVM中

 

 

JVM和DVM的區別

  1. DVMDalvik Virtual Machine的縮寫,是安卓虛擬機的縮寫(為什么不叫AVM-Android Virtual Machine呢?原因是其作者以其祖上居住過的名為Dalvik的村子命名)。
  2. DVM是針對JVMJava Virtual Machine而言的,因為JVMOracle公司(原SUN公司)的產品,擔心版權的問題,既然Java是開源的,索性就研究了JVM,寫出了DVM
  3. JVMDVM主要區別如下:

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直接訪問自己上面的一塊空間的數據的效率肯定要大於訪問內存上面的數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM