筆記(二十)——JVM、DVM(dalvik)和ART之間的區別

——個人平時筆記,看到的同學歡迎指正錯誤,文中多處摘錄于各大博主與書籍精華

1、什么是JVM?

JVM本質上就是一個軟件,是計算機硬件的一層軟件抽象,在這之上才能夠運行Java程序,JAVA在編譯后會生成類似于匯編語言的.class字節碼文件,與C語言編譯后產生的匯編語言不同的是,C編譯成的匯編語言會直接在硬件上跑,但JAVA編譯后生成的.class字節碼是在JVM上跑,需要由JVM把字節碼翻譯成機器指令,才能使JAVA程序跑起來。

JVM運行在操作系統上,屏蔽了底層實現的差異,從而有了JAVA吹噓的平臺獨立性和Write Once Run Anywhere。根據JVM規范實現的具體虛擬機有幾十種,主流的JVM包括Hotspot、Jikes RVM等,都是用C/C++和匯編編寫的,每個JRE編譯的時候針對每個平臺編譯,因此下載JRE(JVM、Java核心類庫和支持文件)的時候是分平臺的,JVM的作用是把平臺無關的.class里面的字節碼翻譯成平臺相關的機器碼,來實現跨平臺。

2、什么是DVM?

Android 運行環境主要指的Dalvik虛擬機技術,也就是安卓虛擬機DVM。Android中的所有Java程序都是運行在DVM上的,每個Android應用進程對應著一個獨立的Dalvik虛擬機實例并在其解釋下執行。DVM沒有遵循Java虛擬機規范,不能直接執行Java的.class文件,而是執行.dex文件。它使用的是寄存器架構而不是JVM中常見的棧架構。其中.dex(Dalvik Executable)文件是通過.class文件轉化而來,安卓使用Java語法編寫應用程序,可以直接使用大部分的Java API等。

雖然DVM也是用Java編程語言,Dalvik虛擬機和一般JAVA虛擬機(Java VM)并不兼容,他們兩個的區別是JVM標準執行的是.class的字節碼(bytecode ),而是DVM執行的是其專有的(.dex)執行文件。在編譯過程中,Java把類編譯成一個或多個.class字節碼文件,然后打包到jar中。JVM會從jar文件中獲得相應的.class文件和jre字節碼。DVM雖然也是用Java語言進行編程, 但是Java程序通過編譯后,還需要通過SDK中的dex工具將.class文件轉化打包成.dex格式文件,DVM才能從其中讀取指令和數據。

JVM與DVM 二者最大的區別在于JVM是基于棧的虛擬機(Stack-based),而DVM是基于寄存器的虛擬機(Register-based)。基于寄存器的虛擬機雖然比基于堆棧的虛擬機在硬件通用性上要差一些,但是它的代碼執行效率卻更好。?顯然DVM最大的好處在于可以根據硬件實現更大的優化,這更適合移動設備的特點。移動終端與PC相比,它不需要很快的CPU和大量的內存空間。Google的測算顯示,64MB的內存已經能讓系統正常運轉了。 其中24MB被用于底層系統的初始化和啟動,另外20MB被用于啟動高層服務。

Java類文件在編譯過后,會產生至少一個.class文件包含大量冗余信息,.SDK中的dex工具會把所有 的.class文件內容整合到一個.dex文件中。通常一個應用apk只有一個classes.dex,但是開啟了multiDexEnabled true分包功能可以生成多個.dex文件。即減少了整體文件的尺寸和IO操作,也提高了類的查找速度。增加了對新的操作碼的支持,使文件結構盡量簡潔,使用等長的指令,借以提高解析速度。

3、什么是ART虛擬機,和JVM/DVM有什么不同?

ART(Android Runtime)是Android 4.4發布的,用來替換Dalvik虛擬,Android 4.4之前默認采用的還是DVM,系統會提供一個選項來開啟ART模式。在Android 5.0時,默認采用ART,DVM也從此退出歷史舞臺。

Dalvik虛擬機執行的是dex字節碼,ART虛擬機執行的是本地機器碼。

Dalvik執行的是dex字節碼,依靠JIT編譯器去解釋執行,運行時動態地將執行頻率很高的dex字節碼翻譯成本地機器碼,然后在執行,但是將dex字節碼翻譯成本地機器碼是發生在應用程序的運行過程中,并且應用程序每一次重新運行的時候,都要重新做這個翻譯工作,因此,即使采用了JIT,Dalvik虛擬機的總體性能還是不能與直接執行本地機器碼的ART虛擬機相比。

安卓運行時從Dalvik虛擬機替換成ART虛擬機后,并不要求開發者重新將自己的應用直接編譯成目標機器碼,也就是說,應用程序仍然是一個包含dex字節碼的apk文件。在安裝應用的時候,dex中的字節碼將被編譯成本地機器碼,之后每次打開應用,執行的都是本地機器碼。移除了運行時的解釋執行,效率更高,啟動更快。(安卓在4.4中發布了ART運行時)

ART優點:

①系統性能顯著提升

②應用啟動更快、運行更快、體驗更流暢、觸感反饋更及時

③續航能力提升

④支持更低的硬件

ART缺點

①更大的存儲空間占用,可能增加10%-20%

②更長的應用安裝時間(還要將.class的字節碼將編譯成本地機器碼)

1、JVM、DVM、ART的區別

2、深入理解虛擬機——JVM、DVM、ART區別

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • JVM、DVM、ART的區別 Android底層學習必須要了解一下java的虛擬機JVM,以及Android的虛擬...
    Random92閱讀 16,208評論 1 13
  • Java 虛擬機在前面的系列文章中有所介紹(http://www.lxweimin.com/c/84fea797b...
    zhangweiheb閱讀 3,160評論 0 3
  • 1. Dalvik&ART 1.1 Dalvik Dalvik是Google公司自己設計用于Android平臺的虛...
    柴江朋閱讀 1,847評論 0 0
  • 隱私政策 我們不會收集及以任何形式儲存來自你社交網路的任何資訊或銷售給廣告或其它營運機構。 個人信息 當你透過社交...
    yyzd閱讀 712評論 0 0
  • 一、百日目標檢視 1.PPT學習完成。 2.養成自律的習慣(作息時間、鍛煉) 3.讀15本書并書寫閱讀...
    冷清澈閱讀 272評論 2 2