Android面試集錦系列(19)——ART & Dalvik
前言
Android的每次版本升級都會帶來一些改變,有些改變對於應用開發者來說並沒有什麼影響,但對於一些重大的改變,我認為Android開發是必要關注和了解一下的,有些改變也許會成為以後的Android進化方向。
面試時,我也比較喜歡問一些每個版本的不同之外,或者問問對方喜歡哪個新版本的特性(如Android 7.0的新特性)。如果比較瞭解每個版本的不同之外,一般來說都是實踐經驗比較豐富的,很多都是踩過坑的。而對新版本是否關注,其實也是一個檢測一個人的學習熱情最好的題目,興趣是最好的老師,對Android有熱情的人很容易從各種途徑獲知相關的資訊。而沒有興趣的人,彷彿與世無爭,只要還能用原來的方式寫程式碼就感覺沒有學習新東西的必要。
如,ART和Dalvik,對於應用開發者來說是無縫過渡的,那麼你不奇怪Google是怎麼做到的嗎?
面試題:知道什麼是ART嗎?它和Dalvik有什麼區別?
我們知道到,計算機只能識別機器碼,而Java的執行是將class位元組碼在JVM上進行解析最後再翻譯成機器碼執行。Dalvik虛擬機器就是針對Android應用(.dex)的一個JVM,雖然他們實現和原理有很多不同,但我們可以簡單這樣理解。
每個應用的程序中都會有一個Dalvik虛擬機器例項,它們是相互獨立的,一個應用的Dalvik虛擬機器Crash了並不影響其他的。APK應用在執行時,就需要Dalvik虛擬機器去載入類並轉化成機器碼執行,這個過程就是JIT(Just-In-Time),雖然dex經過優化會生成一個odex檔案,但這個過程仍然是執行時讓編譯器去解釋位元組碼,相當於多了一道轉換工序,對效能的影響不小。
在Android 4.4的版本里使用者還可以選擇是用Dalvik還是ART,而5.0後的版本直接換成了ART,把Dalvik刪除了。
而ART(Android runtime)和Dalvik不一樣的地方,就是想法去掉了中間解釋位元組碼的過程,Dalvik是JIT的機制,與JIT相對的是AOT(Ahead-Of-Time),它發生在程式執行之前。如我們用靜態語言(例如C/C++)來開發應用程式的時候,編譯器直接就把它們翻譯成目標機器碼。這種靜態語言的編譯方式也是AOT的一種。
但是很多Android應用開發者並不知道有ART的存在,因為ART虛擬機器並不要求開發者將自己的應用直接編譯成目標機器碼,而是在應用安裝時由ART將應用的dex位元組碼翻譯成本地機器碼。所以你會發現,新的版本安裝應用的時間比之前要長一點。
小結
關於ART方面,我也沒有深入研究,有些東西確實是需要興趣或者壓力才能深入進去的。我們在應用層上開發,基本上也很少涉及Framework層以下的修改,但是我們一定要改變一些想法,如感覺和我們無關的就不捨得花時間看一看,然後故步自封偏安一隅。你不看清楚外面的東西,怎麼確認和你有沒有關呢?
最後
在這裡我總結出了網際網路公司Android程式設計師面試簡歷模板,面試涉及到的絕大部分面試題及答案做成了文件和架構視訊資料免費分享給大家【 包括高階UI、效能優化、架構師課程、NDK、Kotlin、混合式開發(ReactNative+Weex)、Flutter等架構技術資料 】,希望能幫助到您面試前的複習且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。
資料獲取方式:加入Android架構交流QQ群聊:513088520 ,進群即領取資料!!!
點選連結加入群聊【Android移動架構總群】: 加入群聊

資料大全