(第一次發技術心得文,如有不周全或不太對的部分,煩請各位修正:))
這篇要來談談 ART 和 Dalvik。
第一次聽到 ART 和 Dalvik 時,腦袋忽然一片空白,再來出現一堆黑人問號
接著就開始 google ART 和 Dalvik….
在正式聊到 ART 前,我們先來談談 Dalvik。
什麼是 Dalvik ?
Dalvik 是一個 Google 開發的 VM(Virtual Machine),用在 Android 手機裡的運行系統。
DVM is based on JIT (Just In Time) compilation
這代表說,每一次使用者在 run app 的時候,有部分將被執行的 code 會在那時後被轉譯成裝置懂的語言。 當使用者在使用 app 的時候,其他的 code 也會被轉譯再被儲存於內存。因為 JIT 只轉譯部分的 Code ,所以也不會佔太多記憶體空間。
什麼是 ART ?
2014年,Google I/O 發表了 ART(Android Runtime)。在 Android 4.4 (KitKat) 中開始使用 ART。
ART is based AOT (Ahead Of Time) compliation。
和 JIT 不同的地方在於,當使用者在安裝 App 的時候,DEX bytecode 轉譯成裝置懂的語言,轉譯好後就被存在手機的內存中。所以每次使用者開啟 App 的時候,就不用再 JIT 一次,Code 能夠更快的被執行。
Android 系統如何執行 code ?
In Android Java classes converted into DEX bytecode. The DEX bytecode format is translated to native machine code via either ART or the Dalvik runtimes. Here DEX bytecode is independent of device architecture.
Android JAVA class 格式的檔案被轉成 DEX bytecode 格式。DEX bytecode 格式在藉由 Dalvik 或 ART 編譯程機器懂的語言。
ART的優點在哪裡?
- App跑得更快更順暢
2. 開啟App的時間縮短
3. 電池續航力更長因為減少了轉譯 bytecode 時所需的電力
4. GC效能改善
ART 的缺點?
- 安裝App較耗時
- 占用較多內存空間
參考文章來源:
Closer Look At Android Runtime: DVM vs ART
ART vs Dalvik — introducing the new Android runtime in KitKat