Jvm、Dalvik和Art的區別

weixin_34054866發表於2017-12-20

JVM Java虛擬機器

JVM(Java Virtual Machine)是一種軟體實現,執行像物理程式的機器。JVM並是不專為Java所實現執行的,只要其他程式語言的編譯器能生成Java位元組碼,那這個語言也能實現在JVM上執行。因此,JVM通過執行Java bytecode可以使java程式碼在不改變的情況下在各種硬體之上。

Dalvik 虛擬機器

Dalvik虛擬機器是基於apache的java虛擬機器,並被改進以適應低記憶體,低處理器速度的移動裝置環境。Dalvik虛擬機器依賴於Linux核心,實現程式隔離與執行緒除錯管理,安全和異常管理,垃圾回收等重要功能。

JVM和Dalvik工作流程:
8669504-2ea1a7935df54a10.png
image.png

JVM和DVM區別:

Java虛擬機器 Dalvik虛擬機器
java虛擬機器基於棧,基於棧的機器必須使用指令來載入和操作棧上資料 Dalvik虛擬機器基於暫存器
java虛擬機器執行的是java位元組碼。(java類會被編譯成一個或多個位元組碼.class檔案,打包到.jar檔案中,java虛擬機器從相應的.class檔案和.jar獲取相應的位元組碼) Dalvik執行的是自己專屬的.dex位元組碼格式。(java類被編譯成.class檔案後,會通過一個dx工具將所有的.class檔案轉換成一個.dex檔案,然後dalvik虛擬機器會從其中讀取指令和資料)
- 一個應用對應一個Diavik虛擬機器例項,獨立執行
JVM在執行的時候為每一個類裝載位元組碼 Dalvik程式只包含一個.dex檔案,這個檔案包含了程式中所有的類

SDK和JDK

SDK,Soft Development Kit (軟體開發包)。但需要指明是屬於什麼的開發包。比如Android SDK就是Android開發包,再比如Push SDK就是訊息推送的SDK。
比如26版本的Android SDK,沒有Android SDK就無法進行Android開發。

JDK,(Java Development Kit)java開發工具包,包中提供了java語言的類庫。

Art虛擬機器

即Android Runtime,Android 4.4釋出了一個ART執行時,準備用來替換掉之前一直使用的Dalvik虛擬機器。
ART 的機制與 Dalvik 不同。在Dalvik下,應用每次執行的時候,位元組碼都需要通過即時編譯器(just in time ,JIT)轉換為機器碼,這會拖慢應用的執行效率,而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啟動(首次)和執行都會變得更加快速。

Dalvik與Art的區別:
  1. Dalvik每次都要編譯再執行,Art只會首次啟動編譯
  2. Art佔用空間比Dalvik大(原生程式碼佔用的儲存空間更大),就是用“空間換時間”
  3. Art減少編譯,減少了CPU使用頻率,使用明顯改善電池續航
  4. Art應用啟動更快、執行更快、體驗更流暢、觸感反饋更及時

注:
現在智慧手機大部分都可以讓使用者選擇使用Dalvik還是ART模式。預設還是使用Dalvik模式。

相關文章