android 虛擬機版本專題及常見問題 - CSDN

2020-12-21 CSDN技術社區

ART、JIT、AOT、Dalvik之間有什麼關係?

JIT與Dalvik

JIT是"Just In Time Compiler"的縮寫,就是"即時編譯技術",與Dalvik虛擬機相關。

怎麼理解這句話呢?這要從Android的一些特性說起。

JIT是在2.2版本提出的,目的是為了提高Android的運行速度,一直存活到4.4版本,因為在4.4之後的ROM中,就不存在Dalvik虛擬機了。

我們使用Java開發android,在編譯打包APK文件時,會經過以下流程

  • Java編譯器將應用中所有Java文件編譯為class文件
  • dx工具將應用編譯輸出的類文件轉換為Dalvik字節碼,即dex文件

之後經過籤名、對齊等操作變為APK文件。

Dalvik虛擬機可以看做是一個Java VM,他負責解釋dex文件為機器碼,如果我們不做處理的話,每次執行代碼,都需要Dalvik將dex代碼翻譯為微處理器指令,然後交給系統處理,這樣效率不高。

為了解決這個問題,Google在2.2版本添加了JIT編譯器,當App運行時,每當遇到一個新類,JIT編譯器就會對這個類進行編譯,經過編譯後的代碼,會被優化成相當精簡的原生型指令碼(即native code),這樣在下次執行到相同邏輯的時候,速度就會更快。

當然使用JIT也不一定加快執行速度,如果大部分代碼的執行次數很少,那麼編譯花費的時間不一定少於執行dex的時間。Google當然也知道這一點,所以JIT不對所有dex代碼進行編譯,而是只編譯執行次數較多的dex為本地機器碼。

有一點需要注意,那就是dex字節碼翻譯成本地機器碼是發生在應用程式的運行過程中的,並且應用程式每一次重新運行的時候,都要做重做這個翻譯工作,所以這個工作並不是一勞永逸,每次重新打開App,都需要JIT編譯。

另外,Dalvik虛擬機從Android一出生一直活到4.4版本,而JIT在Android剛發布的時候並不存在,在2.2之後才被添加到Dalvik中。

ART與AOT

AOT是"Ahead Of Time"的縮寫,指的就是ART(Anroid RunTime)這種運行方式。

前面介紹過,JIT是運行時編譯,這樣可以對執行次數頻繁的dex代碼進行編譯和優化,減少以後使用時的翻譯時間,雖然可以加快Dalvik運行速度,但是還是有弊病,那就是將dex翻譯為本地機器碼也要佔用時間,所以Google在4.4之後推出了ART,用來替換Dalvik。

在4.4版本上,兩種運行時環境共存,可以相互切換,但是在5.0+,Dalvik虛擬機則被徹底的丟棄,全部採用ART。

ART的策略與Dalvik不同,在ART 環境中,應用在第一次安裝的時候,字節碼就會預先編譯成機器碼,使其成為真正的本地應用。之後打開App的時候,不需要額外的翻譯工作,直接使用本地機器碼運行,因此運行速度提高。

當然ART與Dalvik相比,還是有缺點的。

  • ART需要應用程式在安裝時,就把程序代碼轉換成機器語言,所以這會消耗掉更多的存儲空間,但消耗掉空間的增幅通常不會超過應用代碼包大小的20%
  • 由於有了一個轉碼的過程,所以應用安裝時間難免會延長

但是這些與更流暢的Android體驗相比而言,不值一提。

 

總結

通過前面背景知識的介紹,我終於可以更簡單的介紹這四個名詞之間的關係了:

  • JIT代表運行時編譯策略,也可以理解成一種運行時編譯器,是為了加快Dalvik虛擬機解釋dex速度提出的一種技術方案,來緩存頻繁使用的本地機器碼
  • ART和Dalvik都算是一種Android運行時環境,或者叫做虛擬機,用來解釋dex類型文件。但是ART是安裝時解釋,Dalvik是運行時解釋
  • AOT可以理解為一種編譯策略,即運行前編譯,ART虛擬機的主要特徵就是AOT

相關焦點

  • android啟動頁設計專題及常見問題 - CSDN
    轉載請註明出處:http://blog.csdn.net/wangjihuanghun/article/details/63255144啟動頁幾乎成為了每個app的標配,有些商家在啟動頁中增加了開屏廣告以此帶來更多的收入。
  • android 監聽屏幕鎖屏專題及常見問題 - CSDN
    > 鎖屏聽音樂(音頻),沒有鎖屏看視頻Android系統亮屏、鎖屏、屏幕解鎖事件(解決部分手機亮屏後未解鎖即進入resume狀態)- http://blog.csdn.net/oracleot/article/details/20378453Android 實現鎖屏的較完美方案- https://segmentfault.com/a/1190000003075989
  • Android - android xml 層級專題及常見問題 - CSDN
    TextView 對象上使用資源 ID 來設置文本,具體如下:TextView msgTextView = (TextView) findViewById(R.id.msg);msgTextView.setText(R.string.hello);實例考慮如下定義的布局 res/layout/activity_main.xmlandroid
  • android app被殺原因專題及常見問題 - CSDN
    分析長按HOME鍵清理App最終會執行到ActivityManagerService.cleanUpRemovedTaskLocked方法中,ActivityManagerService類在文件"frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java"中,
  • 對抗學習專題及常見問題 - CSDN
    隱馬爾可夫:通過顯序列算隱序列generalization ability 泛化:不要過擬合神經網絡:非線性積累NP完全問題>,Testing Statistical Hypotheses.Springer Texts in Statistics雅可比矩陣:對矩陣變換求導hypothesis space/version space 假設空間與版本空間
  • android 啟動頁慢專題及常見問題 - CSDN
    如果說,OOP如果是把問題劃分到單個模塊的話,那麼AOP就是把涉及到眾多模塊的某一類問題進行統一管理。打個比方Android 裡面PMS,AMS都擁有各自的職責,但是他們都需要通過log系統管理log,這就是一種AOP思想。AspectJ實際上是對AOP編程思想的一個實踐,當然,除了AspectJ以外,還有很多其它的AOP實現,例如ASMDex,但目前最好、最方便的,依然是AspectJ。
  • android開發 自我優勢 - CSDN
    3、能夠有效避免APP運行過程中遇到的內存洩漏和內存溢出問題。4、熟練掌握線程之間通過Handler傳遞消息的機制原理5、熟練掌握自定義控制項,自定義組合控制項中View所經過的測量,布局,繪製的流程,以及Touch事件分發機制。
  • android 布局 覆蓋 - CSDN
    按照正常使用點擊item的空白區域選擇時沒有問題的,但是當你單獨點擊checkbox時,CheckBox沒有相應的點擊事件,而父控制項也沒有捕獲。導致的問題是:顯示的是選擇了,但是實際上並沒有捕獲點擊事件。
  • 加載布局專題及常見問題 - CSDN
    relativeLayout_parent_params) }動態加載布局LayoutInflater 來間接加載什麼叫LayoutInflater這個是個抽象類 在文檔中如下聲明: public abstract class LayoutInflater extends Object Layout inflation是在android
  • 侍魂朧月傳說手遊公測版本更新說明 常見問題解答
    今天為大家帶來的是侍魂朧月傳說手遊公測版本更新方法匯總,常見問題解答。這裡匯總了公測版本的常見問題,感興趣的小夥伴一起來看看吧。常見問題解答1.
  • slot-scope專題及常見問題 - CSDN
    前言vue 插槽,目前到3.0有2種方式,第一種,在2.6之前使用的是slot 和 slot-scpe 2.6後已被官方廢棄,但在2.x版本仍被支持,第二種是vue 在2.6版本後更新的新指令 v-slot 來替代slot 和slot-scpe那麼什麼是插槽呢,作用又是什麼插槽,簡單說,插槽就是杯子
  • 注重用戶體驗的重要性專題及常見問題 - CSDN
    其實關於這個問題,同行交流時也經常討論,我想分享一些我的個人的淺見,大神們覺得沒用請無視。個人覺得現在的SEO不能再只是為了SEO而做SEO,而是要更注重用戶體驗這一塊兒了。現階段關於網站用戶體驗得分排名而上排名的機率很大。
  • python卡方分析專題及常見問題 - CSDN
    推論統計分析2.1 問題是什麼?問題是: 樣本數據是否滿足總體排放值要求?推論統計分析2.1 問題是什麼?問題是:不一致組反應時間均值比一致組反應時間均值長自變量(x變量):我們有兩組實驗數據,第一組是字體內容和顏色一致。第二組數據值是字體內容和顏色不一致。
  • Windows10 中跑 Android(基於 Hyper-V)
    在Windows 10 中運行虛擬機,同樣能安裝 Android-x86 版。目前Oracle VM VirtualBox 6.X 版本,VMware Workstation 16(當前還是2020H1預覽版)都已經支持和 Hyper-V 共存了,如果只從性能的來考慮,VMware 是最強的。
  • cdn助力專題及常見問題 - CSDN
    本次騰訊雲大學大咖分享《騰訊雲計算人才加速計劃》專題之《CDN邊緣智能助力5G》邀請騰訊雲專家工程師 廖龍 將與大家共探技術與產業發展變化下如何引領時代。本課程主要有三章:5G元年,探索與思考,未來展望。5G元年在過去十年,整個中國網際網路的發展迅速。
  • 華為雲智能專題及常見問題 - CSDN
    CarbonData自2015年進入Apache孵化器;2016年CarbonData正式從Apache孵化器畢業,正式成為首個中國公司貢獻的Apache頂級項目;2020年重磅發布2.0裡程碑版本,重新定義智能數據湖索引和事務能力。
  • 如何安裝虛擬機|虛擬機安裝win系統詳細圖文教程
    電腦多個系統,始終還是麻煩了點,所以有些用戶就會使用虛擬機。但是剛開始接觸虛擬機的用戶,可能還不知道虛擬機安裝了之後應該怎麼使用,這篇文章就是給大家帶來的虛擬機安裝win系統詳細圖文教程。
  • windows10卡啟動修復專題及常見問題 - CSDN
    在Windows 10上,安全模式允許加載一組基本功能和通用設備驅動程序,足以解決常見的軟體和硬體問題。例如,當計算機無法正常啟動、網絡連接問題以及應用程式或Windows Update無法下載更新時,可以使用安全模式對其進行故障排除。
  • android 自定義view大小 - CSDN
    直觀來說,可能有以下問題需要考慮:自定的View最好不要超過父控制項的大小,這樣才能保證自己能在父控制項中完整顯示自定的View(如果是ViewGroup)的子控制項最好不要超過自己的大小,這樣才能保證子控制項顯示完整如果明確為View指定了尺寸,最好按照指定的尺寸設置以上三個問題可能是自定義ViewGroup最需要考慮的問題
  • t值判斷顯著性專題及常見問題 - CSDN
    提出問題  顯著性值p是一個很常見的事。比如我們在對比兩組或者是多組數據時,對於兩組而言,會做Two Sample T Test,然後給出一個p值,判斷兩者差異的顯著性。在ggplot2中,兩組數據對比時,我們常用的,就是boxplot,那麼,如何在作出兩組或者多組的boxplot的同時,標記出顯著性的數據呢?