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和ART的區別
- Dalvik和ART執行時環境的區別
- Android 中的Dalvik和ART是什麼,有啥區別?Android
- 一篇文章告訴你Dalvik 和JVM的區別JVM
- Dalvik 和 ART 有什麼區別?深扒 Android 虛擬機器發展史,真相卻出乎意料!Android虛擬機
- Jdk、Jre Jvm的區別和聯絡JDKJVM
- jvm7和8基本區別JVM
- Android SDK各個版本API的特性及相容性(Dalvik/ART)AndroidAPI
- JVM原始碼分析之MetaspaceSize和MaxMetaspaceSize的區別JVM原始碼
- JDK JRE JVM 的區別JDKJVM
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- ../和./和/的區別
- limo和Dalvik VM的一個思路
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- JDK,JRE,JVM區別與聯絡JDKJVM
- Dalvik 和 Java 位元組碼的比較Java
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- 和區別
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別
- SDK和API的區別?API
- var 和 let 的區別
- WebApi和MVC的區別WebAPIMVC