Jvm、Dalvik和Art的區別
JVM Java虛擬機器
JVM(Java Virtual Machine)是一種軟體實現,執行像物理程式的機器。JVM並是不專為Java所實現執行的,只要其他程式語言的編譯器能生成Java位元組碼,那這個語言也能實現在JVM上執行。因此,JVM通過執行Java bytecode可以使java程式碼在不改變的情況下在各種硬體之上。
Dalvik 虛擬機器
Dalvik虛擬機器是基於apache的java虛擬機器,並被改進以適應低記憶體,低處理器速度的移動裝置環境。Dalvik虛擬機器依賴於Linux核心,實現程式隔離與執行緒除錯管理,安全和異常管理,垃圾回收等重要功能。
JVM和Dalvik工作流程:
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的區別:
- Dalvik每次都要編譯再執行,Art只會首次啟動編譯
- Art佔用空間比Dalvik大(原生程式碼佔用的儲存空間更大),就是用“空間換時間”
- Art減少編譯,減少了CPU使用頻率,使用明顯改善電池續航
- Art應用啟動更快、執行更快、體驗更流暢、觸感反饋更及時
注:
現在智慧手機大部分都可以讓使用者選擇使用Dalvik還是ART模式。預設還是使用Dalvik模式。
相關文章
- 一篇文章告訴你Dalvik 和JVM的區別JVM
- Dalvik,ART與ODEX相愛相生
- Dalvik 和 ART 有什麼區別?深扒 Android 虛擬機器發展史,真相卻出乎意料!Android虛擬機
- jvm7和8基本區別JVM
- JVM原始碼分析之MetaspaceSize和MaxMetaspaceSize的區別JVM原始碼
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- Dalvik 和 Java 位元組碼的比較Java
- Java方法鏈呼叫以及在JVM和安卓DalvikVM下的區別JavaJVM安卓
- ../和./和/的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ||和??的區別
- /*和/**的區別
- jquery $(this) 和this的區別jQuery
- JQuery this和$(this)的區別jQuery
- T和?的區別
- makefile =和:=的區別
- ++a和a++的區別
- ./ 和sh 的區別
- 和區別
- Java虛擬機器(JVM)和Python直譯器有什麼區別?Java虛擬機JVMPython
- springmvc和springboot的區別SpringMVCSpring Boot
- SDK和API的區別?API
- ArrayList和LinkedList的區別?
- button和submit的區別MIT
- MTV和MVC的區別MVC
- hadoop和spark的區別HadoopSpark
- rpop 和 brpop的區別
- WebApi和MVC的區別WebAPIMVC
- GET和POST的區別?
- ArrayList和LinkedList的區別
- WBS和TASK的區別?
- JavaScript中for in 和for of的區別JavaScript
- innerText 和 textContent 的區別?
- var 和 let 的區別
- @JsonProperty和@JsonAlias的區別JSON
- POST 和 GET 的區別
- sass和less的區別
- MySQL和Oracle的區別MySqlOracle