日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Android里的Dalvik、ART、JIT、AOT有什么关系?

發(fā)布時間:2023/12/19 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 Android里的Dalvik、ART、JIT、AOT有什么关系? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

JIT,Just-in-time,即時編譯,邊運行邊編譯;

AOT,Ahead Of Time,提前編譯,指運行前編譯。

區(qū)別:這兩種編譯方式的主要區(qū)別在于是否在“運行時”進(jìn)行編譯

優(yōu)劣
JIT優(yōu)點:
  可以根據(jù)當(dāng)前硬件情況實時編譯生成最優(yōu)機(jī)器指令(ps. AOT也可以做到,在用戶使用時使用字節(jié)碼根據(jù)機(jī)器情況在做一次編譯)
  可以根據(jù)當(dāng)前程序的運行情況生成最優(yōu)的機(jī)器指令序列
  當(dāng)程序需要支持動態(tài)鏈接時,只能使用JIT
  可以根據(jù)進(jìn)程中內(nèi)存的實際情況調(diào)整代碼,使內(nèi)存能夠更充分的利用
JIT缺點:
  編譯需要占用運行時資源,會導(dǎo)致進(jìn)程卡頓
  由于編譯時間需要占用運行時間,對于某些代碼的編譯優(yōu)化不能完全支持,需要在程序流暢和編譯時間之間做權(quán)衡
  在編譯準(zhǔn)備和識別頻繁使用的方法需要占用時間,使得初始編譯不能達(dá)到最高性能

AOT優(yōu)點:
  在程序運行前編譯,可以避免在運行時的編譯性能消耗和內(nèi)存消耗
  可以在程序運行初期就達(dá)到最高性能
  可以顯著的加快程序的啟動
AOT缺點:
  在程序運行前編譯會使程序安裝的時間增加
  犧牲Java的一致性
  將提前編譯的內(nèi)容保存會占用更多的外

與Android的關(guān)聯(lián)
  Android在2.2的時候引入JIT,在kitkat時新增了ART(Android RunTime), 在Android L時使用ART完全替代了Dalvik作為默認(rèn)的虛擬機(jī)環(huán)境。

Dalvik
  Dalvik使用JIT,使用.dex字節(jié)碼,是針對Android設(shè)備優(yōu)化后的DVM所使用的運行時編譯字節(jié)碼。

  .odex是對dex的優(yōu)化,deodex在系統(tǒng)第一次開機(jī)時會提取所有apk內(nèi)的dex文件,odex優(yōu)化將dex提前提取出,加快了開機(jī)的速度和程序運行的速度。
ART
  ART 使用AOT,在安裝apk時會進(jìn)行預(yù)編譯,生成OAT文件,仍以.odex保存,但是與Dalvik下不同,這個文件是可執(zhí)行文件。
  dex、odex 均可通過dex2oat生成oat文件,以實現(xiàn)兼容性。在大型應(yīng)用安裝時需要更多時間和空間。

在Android N中引入了一種新的編譯模式,同時使用JIT和AOT。這是我在網(wǎng)上找到的一些解釋:

  包含了一個混合模式的運行時。應(yīng)用在安裝時不做編譯,而是解釋字節(jié)碼,所以可以快速啟動。ART中有一種新的、更快的解釋器,通過一種新的JIT完成,但是這種JIT的信息不是持久化的。取而代之的是,代碼在執(zhí)行期間被分析,分析結(jié)果保存起來。然后,當(dāng)設(shè)備空轉(zhuǎn)和充電的時候,ART會執(zhí)行針對“熱代碼”進(jìn)行的基于分析的編譯,其他代碼不做編譯。為了得到更優(yōu)的代碼,ART采用了幾種技巧包括深度內(nèi)聯(lián)。 對同一個應(yīng)用可以編譯數(shù)次,或者找到變“熱”的代碼路徑或者對已經(jīng)編譯的代碼進(jìn)行新的優(yōu)化,這取決于分析器在隨后的執(zhí)行中的分析數(shù)據(jù)。

  新的ART在安裝程序時使用JIT,在JIT編譯了一些代碼后將這些代碼保存到本地,等到設(shè)備空閑的時候?qū)⒈4娴倪@些代碼使用AOT編譯生成可執(zhí)行文件保存到本地,待下次運行時直接使用,并且不斷監(jiān)視代碼的更新,在代碼有更新后重新生成可執(zhí)行文件。

原文:https://www.cnblogs.com/linghu-java/p/10577515.html

總結(jié)

以上是生活随笔為你收集整理的Android里的Dalvik、ART、JIT、AOT有什么关系?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。