Android運行中DVM和ART表現對比
在了解 Android 運行時之前,我們需要了解什么是運行時環境以及一些基本概念,即 Java 虛擬機(JVM)和 Dalvik 虛擬機(DVM)的功能。
什么是運行時?
簡單來說,運行時就是一個供操作系統使用的系統,它負責將你用高級語言(比如 Java)編寫的代碼轉換成 CPU/處理器能夠理解的機器碼。
運行時由你的程序運行時所執行的指令構成,盡管本質上它們不屬于程序代碼的任何一部分。
CPU (或者更通用的說法電腦)只能夠理解機器語言(二進制代碼),所以為了使程序能夠在 CPU 上運行,就必須將它們翻譯成機器碼,這一工作由翻譯器完成。
這里按序列出歷代翻譯器:
1.匯編器
它直接將匯編語言翻譯成機器碼,所以它的速度非常快。
2.編譯器
它將源碼翻譯成匯編語言,然后再用匯編器轉換成機器碼。這種方式編譯過程很慢但是執行速度很快。但是使用編譯器最大的問題是編譯出來的機器碼依賴于特定的平臺。換句話說,在一臺機器上可以運行的代碼在另一臺不同的機器上可能就無法運行。
3.解釋器
它在執行程序時才翻譯代碼。由于代碼翻譯是在執行階段才發生,所以執行速度很慢。
JAVA 代碼是怎么執行的?
為了使代碼和平臺無關,JAVA開發了 JVM,即 Java 虛擬機。它為每一個平臺開發一個 JVM,也就意味著 JVM 是和平臺相關的。Java 編譯器將 .java 文件轉換成 .class文件,也就是字節碼。最終將字節碼提供給 JVM,由 JVM 將它轉換成機器碼。
這比解釋器要快但是比 C++ 編譯要慢。
Android 代碼是怎么執行的?
在 Android 中,Java 類被轉換成 DEX 字節碼。DEX 字節碼通過 ART 或者 Dalvik runtime 轉換成機器碼。這里 DEX 字節碼和設備架構無關。
Dalvik 是一個基于 JIT(Just in time)編譯的引擎。使用 Dalvik 存在一些缺點,所以從 Android 4.4(Kitkat)開始引入了 ART 作為運行時,從 Android 5.0(Lollipop)開始 ART 就全面取代了Dalvik。Android 7.0 向 ART 中添加了一個 just-in-time(JIT)編譯器,這樣就可以在應用運行時持續的提高其性能。
重點:Dalvik 使用 JIT(Just in time)編譯而 ART 使用 AOT(Ahead of time)編譯。
下圖描述了 Dalvik 虛擬機和 Java 虛擬機之間的差別。
Just In Time (JIT)
使用 Dalvik JIT 編譯器,每次應用在運行時,它實時的將一部分 Dalvik 字節碼翻譯成機器碼。在程序的執行過程中,更多的代碼被被編譯并緩存。由于 JIT 只翻譯一部分代碼,它消耗的更少的內存,占用的更少的物理存儲空間。
Ahead Of Time(AOT)
ART 內置了一個 Ahead-of-Time 編譯器。在應用的安裝期間,他就將 DEX 字節碼翻譯成機器碼并存儲在設備的存儲器上。這個過程只在將應用安裝到設備上時發生。由于不再需要 JIT 編譯,代碼的執行速度要快得多。
由于 ART 直接運行的是應用的機器碼(native execution),它所占用的 CPU 資源要少于 使用 JIT 編譯的 Dalvik。由于占用較少的 CPU 資源也就消耗更少的電池資源。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
Android運行中DVM和ART表現對比下載
相關電子資料下載
- MOVIPRO:電機初始化Starting up the motor encoder 15
- ArtDAQ數據采集管理軟件升級功能介紹 47
- Gartner 2024年十大戰略技術趨勢,談談持續威脅暴露管理(CTEM) 54
- 組態王和觸摸屏與200Smart之間PN無線通訊 80
- 華三smart-link H3C智能鏈接配置步驟 43
- Gartner發布2024年十大戰略技術趨勢 428
- RT-Smart應用開發筆記:fopen造成文件被清空問題的分析記錄 85
- Molex推首款符合OCP標準KickStart連接器系統 37
- 聊聊SOC設計質量相關的規范 41
- Gartner發布2024 年十大戰略技術趨勢 208