【學習筆記】Android Runtime Architecture(ART)

本篇主要是紀錄我對於ART的理解,分別有四個小項目(1)何為ART(2)ART的用途(3)ART運作流程與(4)總結。

ㄧ、何為ART
ART於Android 5.0開始取代Dalvik虛擬機器。其採用AOT(Ahead-of-time)這種預先編譯的技術,提升了整體應用程式的執行效能。ART也優化了Java的資源回收機制(Garbage Collection, GC)。

一般來說,撰寫好的Java檔編譯後會產生Class檔,並交由JVM來執行。但是Android並不使用JVM,而是使用ART,同時其執行的檔案也非Class檔,而是dex(Dalvik Executable)檔。原因為dex檔比Class檔更加精簡,執行效率更高更省電,是為行動裝置所打造的一個執行檔。

二、ART的用途
如同第一項所述,ART於Android 5.0開始取代Dalvik虛擬機器。為了提升Android應用程序的效率,Android引入ART技術來逐漸取代Dalvik。

三、ART與Dalvik運作流程比較


如上圖所示,在安裝之前,其流程與一般無異,皆是將代碼等資料打包為APK檔。不同的點在於安裝過程中以Dalvik虛擬機運作的過程是將dex檔藉由dexopt轉為Odex檔;ART則是藉由dex2oat轉換為ELF檔。

註解:
Dex File:dex(Dalvik Executable)是專為Dalvik設計的一種壓縮格式,適合記憶體和處理器速度有限的系統。在編譯打包為APK時,會先將java檔編譯為class檔,接著通過dx工具將class檔轉換為dex檔。
Odex File:Odex(Optimized dex)為優化過後的dex,主要是為了提高DVM的運作速度。
ELF File:ELF(Executable and Linkable Format)在此同為優化過後的dex,說得更精準點為將dex的代碼轉為機械指令。
dexopt:負責的動作是將dex檔進行優化,進而產生Odex檔。
dex2oat:負責的動作是將dex檔進行優化,進而產生ELF檔。
JIT:即時編譯(Just-in-time Compilation,JIT),又稱動態轉譯(Dynamic Translation),是一種通過在運行時將位元組碼翻譯為機器碼,從而改善位元組碼編譯語言性能的技術。即時編譯前期的兩個運行時理論是位元組碼編譯和動態編譯。

四、總結
在ART模式下,dex2oat會直接將dex轉換為ELF的檔案格式,其特點在於轉換為機械指令。跟Odex相較之下,由於Odex執行時,必須在Dalvik虛擬機中再次編譯一次,拖累了整體運作的效率,因此在ART模式下執行反而更有效率。

參考資料:
1. https://books.google.com.tw/books?id=2oYmDwAAQBAJ&pg=SA3-PA27&lpg=SA3-PA27&dq=SurfaceManager+%E5%AF%A6%E4%BD%9C&source=bl&ots=NHteHB7wLX&sig=M_9mcr4FHA8wT6Gp1rUdFA9KdXg&hl=zh-TW&sa=X&ved=0ahUKEwjx3-2Ys77bAhXEoJQKHdD6AdoQ6AEIWTAJ#v=onepage&q&f=false
2. https://mobile100.gitbooks.io/android/paper/2015/1501210385.html
3. https://zh.wikipedia.org/wiki/Dalvik%E8%99%9A%E6%8B%9F%E6%9C%BA
4. http://androidbiancheng.blogspot.com/2010/05/jit-dalvik-jit.html
5. http://rangerzhou.top/2017/06/30/%E5%85%B3%E4%BA%8EDalvik%E3%80%81ART%E3%80%81DEX%E3%80%81ODEX%E3%80%81JIT%E3%80%81AOT%E3%80%81OAT/
6. http://sp1.wikidot.com/elfobjfile
7. https://blog.csdn.net/u012455213/article/details/53862637

沒有留言:

張貼留言