Android系統架構詳解(2)--Android Runtime
現在再說Android Runtime
和以前說的Android Runtime
有所不同了,因為現在的Android Runtime
是ART
機制,是google android4.4
新的執行機制。ART
的機制與 Dalvik
不同。在 Dalvik
下,應用每次執行的時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的執行效率,而在 ART
環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time
)。這樣的話,應用的啟動和執行都會變得更加快速。
開篇就說了這麼多專業詞是不是有點蒙了,說實話我自己也暈,因為我是應用開發,而且是半路轉行做的開發,對計算機原理一類的東西認知度接近於0
,先說說以前的Dalvik
吧。知過去才能懂現在。
(一) Dalvik
關於Dalvik
的文章寫了好幾天,本來已經總結了好幾百字了,發現說的條例有點亂,後來無意中發現一位大俠寫的相當好,但是太深了,所以我就直接將做了一個精簡,重新整理了一下,原帖網址為http://blog.csdn.net/andyxm/article/details/6126907,文中大部分專業知識引用於此,有興趣的童鞋可以自己做更深的研究。
我們通過四個問題來了解Dalvik:
- 什麼是Dalvik虛擬機器?
Dalvik VM
與JVM
有什麼區別?- 有什麼新的特點?
Dalvik VM
的架構是怎麼樣的?
前三個問題下文中做了總結和引導,這第四個問題。。。尼瑪,這個架構看的我是頭昏眼花,研究了好久,只明白了冰山一角。反正我不明白也就不隨便亂說了,有興趣的自己去原部落格看吧。
1) 什麼是Dalvik虛擬機器?
首先,回顧一下什麼是java虛擬機器。Java虛擬機器(JVM)是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。它有自己完善的硬體架構(如處理器、堆疊、暫存器等),還具有相應的指令系統。使用“Java虛擬機器”程式就是為了支援與作業系統無關、在任何系統中都可以執行的程式。
因此,我們不妨對Dalvik虛擬機器作出這樣的描述:
Dalvik虛擬機器是Android程式的虛擬機器,是Android中Java程式的執行基礎。其指令集基於暫存器架構,執行其特有的檔案格式——dex位元組碼來完成物件生命週期管理、堆疊管理、執行緒管理、安全異常管理、垃圾回收等重要功能。它的核心內容是實現庫(libdvm.so
),大體由C語言實現。依賴於Linux核心的一部分功能——執行緒機制、記憶體管理機制,能高效使用記憶體,並在低速CPU上表現出的高效能。每一個Android應用在底層都會對應一個獨立的Dalvik虛擬機器例項,其程式碼在虛擬機器的解釋下得以執行。
2) Dalvik VM與JVM有什麼區別?
Dalvik VM ≠Java VM
Dalvik 執行的是特有的DEX檔案格式,而JVM執行的是*.class檔案格式。
Dalvik 基於暫存器,而JVM基於棧。
基於棧與基於暫存器的架構,誰更快?現在實際的處理器,大多都是基於暫存器的架構,從側面反映出基於暫存器比基於棧的架構更與實際的處理器接近。但對於VM來說,源架構的求值棧或者暫存器都可能是用實際機器的記憶體來模擬的,所以效能特性與實際硬體又有不同。一般認為基於暫存器架構的Dalvik VM
比基於棧架構JVM執行效率更高,原因是:雖然零地址指令更緊湊,但完成操作需要更多的load/store指令,也意味著更多的指令分派(instruction dispatch)次數與記憶體訪問次數;訪問記憶體是執行速度的一個重要瓶頸,二地址或三地址指令雖然每條指令佔的空間較多,但總體來說可以用更少的指令完成操作,指令分派與記憶體訪問次數都較少。
Dalvik優勢:
A. 在編譯時提前優化程式碼而不是等到執行時
B. 虛擬機器很小,使用的空間也小;被設計來滿足可高效執行多種虛擬機器例項。
C. 常量池已被修改為只使用32位的索引,以簡化直譯器
3) Dalvik VM有什麼新的特點?
Dalvik VM
的新特點可以概括為:一個應用,一個虛擬機器例項,一個程式!!!
每一個Android應用都執行在一個Dalvik
虛擬機器例項裡,而每一個虛擬機器例項都是一個獨立的程式空間。每個程式之間可以通訊(IPC
,Binder機制實現)。虛擬機器的執行緒機制,記憶體分配和管理,Mutex
等等都是依賴底層作業系統而實現的。
不同的應用在不同的程式空間裡執行,當一個虛擬機器關閉或意外中止時不會對其它虛擬機器造成影響,可以最大程度的保護應用的安全和獨立執行。
有一張圖,很牛逼,總結的很精闢:
(二) ART
這是android4.4
的新東西,還在研究呢,除了官網沒有太多可參考的材料,加上時間有限,我就從百度百科裡扒下來一部分內容略作修改,以後慢慢再做總結改進。
從 Android 4.4 開始,Google 開發者引進了新的Android 執行環境 ART(意思就是 Android Runtime
。Android 官方頁面的介紹中,也將其稱作新的虛擬機器),以替代舊的 Dalvik VM
。它現在是實驗選項,系統預設的執行環境仍然是 Dalvik
。ART
會為 Android 帶來怎樣的改變?AndroidPolice
網站對此進行了分析。
ART
的機制與 Dalvik
不同。在 Dalvik
下,應用每次執行的時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的執行效率,而在 ART
環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time
)。這樣的話,應用的啟動和執行都會變得更加快速。
根據一些基準測試,新的執行環境能夠使大多數應用的執行時間減半。這意味著,CPU 消耗大、執行時間長的應用能夠更加快速地完成,而一般的應用也能更加流暢,比如動畫效果更順暢,觸控反饋更加即時。在多核處理器的裝置上,多數情況下只需啟用少量的核心,或者能夠更好的利用 ARM 的 big.LITTLE
架構。另外,它將會顯著提升電池的續航能力以及系統的效能。
預編譯也會帶來一些缺點。一方面,機器碼佔用的儲存空間更大。位元組碼變為機器碼之後,可能會增加 10%-20%,不過在應用包中,可執行的程式碼常常只是一部分。比如最新的 Google+ APK 是 28.3 MB,但是程式碼只有 6.9 MB。另一方面,應用的安裝時間會變長。至於延長多少時間,取決於應用本身,一些複雜的應用如 Facebook 和 Google+ 會讓你等待更長時間。
總的來說,ART 的優點還是遠遠超越其缺點的,執行起來更有效率、耗電更少、佔的記憶體也更低。畢竟,影響使用者體驗的要素中,電池續航和應用順暢執行更為重要。我們仍然不知道 ART 何時能夠替代 Dalvik
,不過 AndroidPolice 網站說,Google 已經祕密開發了兩年之久。Android 擺脫卡頓的希望,看來就是它了。
相關文章
- 【Android系統】Android系統架構簡介Android架構
- Android架構元件WorkManager詳解Android架構元件
- Android系統架構圖Android架構
- Android-系統架構Android架構
- Android初級之路-Android系統架構簡介Android架構
- Android系統架構與系統原始碼目錄Android架構原始碼
- ArcGIS Runtime For AndroidAndroid
- 淺談Android os體系架構Android架構
- Android架構合集Android架構
- Android MVP 架構AndroidMVP架構
- 圖解Android - Android GUI 系統 (2) - 視窗管理 (View, Canvas, Window Manager)圖解AndroidGUIViewCanvas
- Android官方架構元件Lifecycle:生命週期元件詳解&原理分析Android架構元件
- Android 控制元件架構與自定義控制元件詳解Android控制元件架構
- 圖解Android - Android GUI 系統 (1) - 概論圖解AndroidGUI
- Android-MVP架構AndroidMVP架構
- Android Flux架構初探AndroidUX架構
- android:ToolBar詳解(手把手教程)(2)Android
- Android AsyncTask 詳解Android
- Android拖拽詳解Android
- Android系統服務DropBoxManagerService詳解與實踐應用Android
- Android Things系統結構及展望Android
- 架構雜談(Android、Web)架構AndroidWeb
- Android 什麼是架構?Android架構
- Android新元件架構——LifecylceAndroid元件架構
- Android專案架構搭建Android架構
- Android 元件化架構概要Android元件化架構
- Android 打造RxBus2.x的全面詳解Android
- 移動端架構師_Android架構師成長體系課程架構Android
- Android 訊息機制詳解(Android P)Android
- Android工程gradle詳解AndroidGradle
- Android Service詳解(一)Android
- Android元件詳解—TextViewAndroid元件TextView
- Android AIDL使用詳解AndroidAI
- Android Service詳解(二)Android
- Android-Application詳解AndroidAPP
- Android混淆(Proguard)詳解Android
- Android SecureRandom漏洞詳解Androidrandom
- Android 向量圖詳解Android