您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

Android運(yùn)行中DVM和ART表現(xiàn)對比

大?。?/span>0.3 MB 人氣: 2017-09-25 需要積分:1

  在了解 Android 運(yùn)行時之前,我們需要了解什么是運(yùn)行時環(huán)境以及一些基本概念,即 Java 虛擬機(jī)(JVM)和 Dalvik 虛擬機(jī)(DVM)的功能。

  什么是運(yùn)行時?

  簡單來說,運(yùn)行時就是一個供操作系統(tǒng)使用的系統(tǒng),它負(fù)責(zé)將你用高級語言(比如 Java)編寫的代碼轉(zhuǎn)換成 CPU/處理器能夠理解的機(jī)器碼。

  運(yùn)行時由你的程序運(yùn)行時所執(zhí)行的指令構(gòu)成,盡管本質(zhì)上它們不屬于程序代碼的任何一部分。

  CPU (或者更通用的說法電腦)只能夠理解機(jī)器語言(二進(jìn)制代碼),所以為了使程序能夠在 CPU 上運(yùn)行,就必須將它們翻譯成機(jī)器碼,這一工作由翻譯器完成。

  這里按序列出歷代翻譯器:

  1.匯編

  它直接將匯編語言翻譯成機(jī)器碼,所以它的速度非??臁?/p>

  2.編譯器

  它將源碼翻譯成匯編語言,然后再用匯編器轉(zhuǎn)換成機(jī)器碼。這種方式編譯過程很慢但是執(zhí)行速度很快。但是使用編譯器最大的問題是編譯出來的機(jī)器碼依賴于特定的平臺。換句話說,在一臺機(jī)器上可以運(yùn)行的代碼在另一臺不同的機(jī)器上可能就無法運(yùn)行。

  3.解釋器

  它在執(zhí)行程序時才翻譯代碼。由于代碼翻譯是在執(zhí)行階段才發(fā)生,所以執(zhí)行速度很慢。

  JAVA 代碼是怎么執(zhí)行的?

  為了使代碼和平臺無關(guān),JAVA開發(fā)了 JVM,即 Java 虛擬機(jī)。它為每一個平臺開發(fā)一個 JVM,也就意味著 JVM 是和平臺相關(guān)的。Java 編譯器將 .java 文件轉(zhuǎn)換成 .class文件,也就是字節(jié)碼。最終將字節(jié)碼提供給 JVM,由 JVM 將它轉(zhuǎn)換成機(jī)器碼。

  這比解釋器要快但是比 C++ 編譯要慢。

  Android 代碼是怎么執(zhí)行的?

  在 Android 中,Java 類被轉(zhuǎn)換成 DEX 字節(jié)碼。DEX 字節(jié)碼通過 ART 或者 Dalvik runtime 轉(zhuǎn)換成機(jī)器碼。這里 DEX 字節(jié)碼和設(shè)備架構(gòu)無關(guān)。

  Dalvik 是一個基于 JIT(Just in time)編譯的引擎。使用 Dalvik 存在一些缺點,所以從 Android 4.4(Kitkat)開始引入了 ART 作為運(yùn)行時,從 Android 5.0(Lollipop)開始 ART 就全面取代了Dalvik。Android 7.0 向 ART 中添加了一個 just-in-time(JIT)編譯器,這樣就可以在應(yīng)用運(yùn)行時持續(xù)的提高其性能。

  重點:Dalvik 使用 JIT(Just in time)編譯而 ART 使用 AOT(Ahead of time)編譯。

  下圖描述了 Dalvik 虛擬機(jī)和 Java 虛擬機(jī)之間的差別。

  Android運(yùn)行中DVM和ART表現(xiàn)對比

  Just In Time (JIT)

  使用 Dalvik JIT 編譯器,每次應(yīng)用在運(yùn)行時,它實時的將一部分 Dalvik 字節(jié)碼翻譯成機(jī)器碼。在程序的執(zhí)行過程中,更多的代碼被被編譯并緩存。由于 JIT 只翻譯一部分代碼,它消耗的更少的內(nèi)存,占用的更少的物理存儲空間。

  Ahead Of Time(AOT)

  ART 內(nèi)置了一個 Ahead-of-Time 編譯器。在應(yīng)用的安裝期間,他就將 DEX 字節(jié)碼翻譯成機(jī)器碼并存儲在設(shè)備的存儲器上。這個過程只在將應(yīng)用安裝到設(shè)備上時發(fā)生。由于不再需要 JIT 編譯,代碼的執(zhí)行速度要快得多。

  由于 ART 直接運(yùn)行的是應(yīng)用的機(jī)器碼(native execution),它所占用的 CPU 資源要少于 使用 JIT 編譯的 Dalvik。由于占用較少的 CPU 資源也就消耗更少的電池資源。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?