認識Android的Dalvik與ART虛擬機 - 手機討論

Kumar avatar
By Kumar
at 2017-06-07T20:57

Table of Contents

剛剛在IT之家看到一邊不錯的文章,翻譯過來給大家看看吧
(ps.對於大陸用語過敏的版友請直接右轉,不要再底下崩潰了!)




IT之家學院:認識Android中的Dalvik與ART虛擬機
--
又是一年高考時啊,在文章開始之前,IT之家先祝各位高考考生金榜題名~

每到這個時候,小編就會想起自己的高三時光和高考經歷,那段時光真是讓人難忘。提起
高三生活,可能很多同學都會想到桌子上堆得厚厚的書,黑板上的課程表和高考倒計時,
還有那個可能再也沒有機會和你在一個教室上課的,你喜歡了很久卻一直沒勇氣告白的女
同學。

不過若要說起對於當年的高三,小編印象最深的是什麼,小編覺得大概就是那台學習機了
吧。

若以當年的標準來看,那台機子的配置還算主流,1GHz的處理器,512MB的內存,8GB的存
儲空間,分辨率為800*600的8英寸電阻屏,Android 2.3.6系統。

這時可能有讀者要吐槽了,活該小編你單身一輩子!高三有那麼多美好的人和事,這麼多
年過去了,你竟然只記得你的學習機!

嗯,是的,可能你不知道,在班裡所有人玩手機都要偷偷玩的時候,能在課桌上光明正大
地玩一台安卓設備簡直爽得上了天。

不過那台機子的體驗放在今天來看可能並不好,首先,它是電阻屏,要操作它恐怕得使點
勁兒,另外,它的系統總是感覺不太跟手,用過早些時候的Android系統的讀者可能知道
那種感覺,並不是卡,而是沒有今天Android系統的這種程序一點即開,操作體驗如絲般
順滑的感覺。

為什麼當年的Android系統用著就是沒有如今的流暢呢?原因之一,當年設備的硬件配置
沒有如今的好,不過今天,我們不妨換一個方向,從操作系統的角度來探討這個問題。大
家知道,Android應用是運行在虛擬機中的,那麼今天,IT之家就和大家聊聊這個虛擬機。

http://i.imgur.com/DAQRXDe.jpg

Android中虛擬機的作用是什麼呢?當然是運行Android應用程序,應用程序對於一款操作
系統來講至關重要,想想我們的日常,幾乎每天都離不開應用程序,早上起床時,你需要
鬧鐘應用,與家人和朋友溝通時,你需要即時通訊應用,白天看到好玩的,中午吃到好吃
的,想要記錄和分享它們,你需要相機應用,所以我們衡量一款操作系統,一個重要的指
標就是這個平台上的應用的數量和質量如何,就像蓋一棟房子一樣,地基打得穩,卻沒有
磚瓦,最後這棟房子肯定蓋不起來。

Android誕生之初,可謂強者環伺,Windows Mobile和塞班如日中天,iOS的發展形式一片
大好,為了在激烈的競爭中脫穎而出,也為了吸引越來越多的開發者,Android選擇JAVA
作為其應用程序的編程語言。

之所以選擇JAVA,是因為這種編程語言已經為很多開發者所熟知,當開發者選擇為安卓開
發應用程序時,他們所面臨的入門門檻將非常之低。

另外,JAVA具有跨平台的特性,和iPhone不同,搭載Android系統的手機多如繁星,它們
搭載著不同品牌不同型號的處理器,而編程語言對平台支持的廣泛即意味著Android系統
對硬件選擇的自由。

開發者使用JAVA語言在IDE里為Android平台寫的代碼叫做源碼,這種源碼是人類可以理解
的語言,這種語言人類可以理解,但是機器無法理解,就像對一個意大利人說“любл
ютебя”,對一個美國人說“おはようございます”一樣,你直接把源碼告訴Androi
d設備,讓它執行,它肯定不會執行的,因為它聽不懂啊~

所以,你需要將源碼翻譯成機器可以理解的機器碼。不過這時問題來了,運行安卓系統的
硬件五花八門,這部手機搭載的可能是高通的處理器,那部手機搭載的可能是英特爾處理
器,你通過源碼翻譯成的機器碼,高通處理器能看得懂,他執行了,英特爾處理器看不懂
,他就會罷工。
沒關係,我們可以先將源碼翻譯成字節碼,字節碼是一種中間碼,它雖不能和手機的硬件
層直接打交道,但是卻可以被Android系統中的虛擬機所理解,當Android系統的虛擬機看
到一段字節碼後,它會根據設備硬件的不同而將字節碼翻譯成不同的硬件能夠理解的機器
碼。

在Android 4.4之前,Android系統是讓一種名叫Dalvik的虛擬機來充當翻譯官的角色,當
你將應用安裝在手機上後,應用程序的代碼將會以字節碼保存,每次你冷啟動一個應用時
,Dalvik虛擬機便會將字節碼翻譯成機器碼,然後交給硬件來執行。 Dalvik虛擬機是個
特別勤勞的傢伙,它從來也不怕麻煩,每次你將一個應用關閉然後再次冷啟動它時,Dalv
ik虛擬機就要再重複一次將字節碼翻譯成機器碼的動作。

所以,你每次冷啟動一個應用都要經過一次重新編譯,在編譯的這段時間你只能乾等,或
者欣賞Android系統的過場動畫,或者摔掉手機。

雖然Dalvik虛擬機的辛勞讓我們非常感動,不過我們不想在每次啟動應用時都等上那麼幾
秒或者幾分鐘,所以Dalvik,你是個好人,但是我們不合適,我們還是做朋友吧,友誼地
久天長。

時代在發展,科技在進步,2013年,Android 4.4為我們帶來了Dalvik虛擬機的替代者—
—ART虛擬機。

ART,全稱為Android Runtime,翻譯成中文則是安卓運行時,這個名字起得巧妙,因為英
文中的“ART”正有“藝術”之意。

和Dalvik虛擬機一樣,ART虛擬機的作用是將字節碼翻譯成機器碼,不過,它們工作的方
法不一樣,相比於任勞任怨Dalvik虛擬機來說,ART虛擬機顯然更加聰明。 Dalvik虛擬機
的做法是,你安裝一個應用時,它對字節碼不做處理,當你啟動應用時,它才將字節碼編
譯成機器碼,這個我們前面講過,而ART虛擬機的做法是什麼呢?早在你安裝應用時,它
就將字節碼編譯為機器碼,此後當你啟動一個應用時,虛擬機無需對它重新進行編譯,只
要直接運行已經編譯過的機器碼即可,因此這時,你就可以更快地冷啟動一個應用。

引援CSDN裡的大神舉的一個例子,Dalvik虛擬機就像是折疊自行車,想把它騎走你得先組
裝,ART虛擬機則相當於組裝好的自行車,什麼事兒也不用費,騎上了直接走人。

不過,任何事物都有它的兩面性,ART不是完美無缺,Dalvik也不是一無是處。

通常情況下,機器碼所佔的存儲空間會比字節碼要大一點,你在Dalvik模式下安裝一個應
用,它所佔的空間是50M,那在ART模式安裝同樣的應用,它所佔的空間可能就是70M。

另外,在你ART模式下安裝一個應用時,這個應用的字節碼要被編譯成機器碼,這個編譯
需要一個過程,會花費一些時間,而你在Dalvik模式下安裝一個應用時,其字節碼並不需
要被編譯成機器碼,因此,你在ART模式下安裝應用更費時間,在Dalvik模式下安裝應用
則更省時間。
一句話概括,ART的路子無非就是和以空間換時間和時間轉移。即通過直接運行佔用存儲
空間更大但更高效的機器碼來節約時間,和將打開應用所需的時間轉移到安裝應用這一步。

也許它們的缺點和優點並不是絕對的,我們可以試著把Dalvik虛擬機和ART虛擬機放在特
定的歷史環境中。
在Android使用Dalvik虛擬機的那個時代,安卓設備用於存儲應用程序的空間往往很小,
所以節省存儲空間是最重要的,而到了Android使用ART虛擬機的時代,安卓設備用於存儲
應用程序的空間已經足夠了,用戶們可以追求更高的流暢度了,所以,應用程序佔用多大
的空間無所謂,運行效率夠高,打開速度夠快,運行起來夠流暢即可。

有些人認為,Android 5.0蘿莉炮是Android系統的里程碑,因為從Android 5.0開始,這
個系統的UI設計團隊總算是有些審美了,不過我認為,Android 4.4才是Android系統的里
程碑,雖然它的UI設計和前一代相比並沒有太大的變化,但是Android 4.4內在的提升是
巨大的,在開發者選項中,Android 4.4對ART模式進行了大膽的探索,而正是這種探索,
為今天流暢易用的Android系統鋪平了道路。

以上就是今天關於Android的Dalvik虛擬機和ART虛擬機的探討的全部內容。出於淺顯易懂
的原則,本文並沒有對Android底層和硬件方面進行深入討論,在撰寫這篇文章時,筆者
參考了維基百科和相關技術博客中的一些知識,若文中有定義錯誤或者事實錯誤,還請各
位讀者不吝賜教。

-

--
Tags: 手機

All Comments

Edward Lewis avatar
By Edward Lewis
at 2017-06-09T23:59
太長了
Isabella avatar
By Isabella
at 2017-06-12T03:01
不過Dalvik變成ART真的有感嗎?XD
Robert avatar
By Robert
at 2017-06-14T06:03
求個懶人包...
Rosalind avatar
By Rosalind
at 2017-06-16T09:06
其實簡單就是折疊腳踏車那段
James avatar
By James
at 2017-06-18T12:08
我上一台手機更新5.0後開始LAG 4.4.2都好好的
Heather avatar
By Heather
at 2017-06-20T15:10
我一秒看完 的確是好文
Margaret avatar
By Margaret
at 2017-06-22T18:13
Nexus 7 2012跑ART不如Dalvik, 可能真的需要更新硬體來支援吧。
Robert avatar
By Robert
at 2017-06-24T21:15
我以為大家都知道…不唬爛…
Frederica avatar
By Frederica
at 2017-06-27T00:17
不是要噓對岸文,而是改art都多久以前的事了?當時就討論爛了 新文主題居然是在用火
Ethan avatar
By Ethan
at 2017-06-29T03:19
我記得是在M7 2013時的話題,現在都過4年了在u11. 2017了
Oliver avatar
By Oliver
at 2017-07-01T06:22
這就是安卓一開始出來用起來卡卡的原因
Lucy avatar
By Lucy
at 2017-07-03T09:24
剛看到這篇,我還以為時光回溯了 XD
Gary avatar
By Gary
at 2017-07-05T12:26
上面還一篇note2,還好下面一篇U11,今年還是2017
Ingrid avatar
By Ingrid
at 2017-07-07T15:29
就技術知識層面看來,的確是個好文,但…都多久之前
Skylar Davis avatar
By Skylar Davis
at 2017-07-09T18:31
的事情了?
Victoria avatar
By Victoria
at 2017-07-11T21:33
有洗文章之嫌
Anonymous avatar
By Anonymous
at 2017-07-14T00:35
唉唉 誰知道他要那麼晚發呢
William avatar
By William
at 2017-07-16T03:38
鴿子封包
George avatar
By George
at 2017-07-18T06:40
好大的火
Agatha avatar
By Agatha
at 2017-07-20T09:42
不過資訊拖了又會過時了 現在的ART不再是等於native
Victoria avatar
By Victoria
at 2017-07-22T12:44
Dalvik其實有cache能紓緩一些
Emma avatar
By Emma
at 2017-07-24T15:47
其實用JIT vs AOT來說明比較合適 dalvik和ART就像是產品名

長輩機推薦與購買處

Harry avatar
By Harry
at 2017-06-07T20:45
請教長輩上隻手機用Zenfone5 現在要換新機,以下需求 1長輩身邊目前沒人可教他使用新機,所以偏好買跟Zenfone5簡易模式類似的機子。 2照相功能佳 3平時用line,fb (預算不限atat 還想請教若要買空機 高雄巨蛋到高雄車站的範圍內 有沒有推薦的店家 感謝各位的幫忙andgt;andlt; ...

網路購買手機問題。。

Lydia avatar
By Lydia
at 2017-06-07T20:07
幫友代PO https://tw.bid.yahoo.com/booth/Y2112710968?bfe=1 網址在這↑↑↑↑↑ 因為手機壞了(合約到今年九月),想說買個便宜可是規格不要太落伍的手機。 逛拍賣逛到這賣家賣的手機,看他評價很好 ,可是手機意外到太便宜了,便宜到有點怕怕的。不知道有沒有網友跟他 ...

三星S8+ 及 iPhone 7+ 之自由落體試驗

Ida avatar
By Ida
at 2017-06-07T20:05
曲面螢幕的Samsung S8+到底耐不耐摔?國外有位老兄拿了三星S8+及 iPhone 7+做了自由 落體實驗。實驗方法如下: 首先是從這位老兄腿長的高度開始測試,讓兩支手機自由落體墜落。 測試項目有三個: 1. 手機背面落體 2. 手機側面落體 3. 手機正面落體 然後不斷增加自由落體的測試高度,直 ...

m8相機 維修

Zora avatar
By Zora
at 2017-06-07T19:51
*已爬過文 各位前輩高手晚安 三年三個月的m8 從來沒維修過 相機莫名爆掉水波紋 (完全沒摔到碰到有一天起床就變成這樣) (其他功能正常) 送原廠(八德)說相機模組+校正要價2620 現場修要三小時(還得請假去) 在此之前有詢問過某家有料可現場維修的通訊行 說相機連著主機板都要換2500(連著主機板都要換 ...

會出高通S835的雙系統手機嗎?

Oscar avatar
By Oscar
at 2017-06-07T19:47
據說年底就要出高通S835的Win10平板了, 不知會不會有廠商出Win 10跟android的手機??? 這次的S835的Win10是玩真的,可以執行exe的程式. S835的cpu比Intel的6200u還強, GPU有nvidia 940MX的水準. 然後USB 3.1可以輸出視訊. 以後出門帶一隻 ...