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

By Kumar
at 2017-06-07T20:57
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底層和硬件方面進行深入討論,在撰寫這篇文章時,筆者
參考了維基百科和相關技術博客中的一些知識,若文中有定義錯誤或者事實錯誤,還請各
位讀者不吝賜教。
-
--
(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

By Edward Lewis
at 2017-06-09T23:59
at 2017-06-09T23:59

By Isabella
at 2017-06-12T03:01
at 2017-06-12T03:01

By Robert
at 2017-06-14T06:03
at 2017-06-14T06:03

By Rosalind
at 2017-06-16T09:06
at 2017-06-16T09:06

By James
at 2017-06-18T12:08
at 2017-06-18T12:08

By Heather
at 2017-06-20T15:10
at 2017-06-20T15:10

By Margaret
at 2017-06-22T18:13
at 2017-06-22T18:13

By Robert
at 2017-06-24T21:15
at 2017-06-24T21:15

By Frederica
at 2017-06-27T00:17
at 2017-06-27T00:17

By Ethan
at 2017-06-29T03:19
at 2017-06-29T03:19

By Oliver
at 2017-07-01T06:22
at 2017-07-01T06:22

By Lucy
at 2017-07-03T09:24
at 2017-07-03T09:24

By Gary
at 2017-07-05T12:26
at 2017-07-05T12:26

By Ingrid
at 2017-07-07T15:29
at 2017-07-07T15:29

By Skylar Davis
at 2017-07-09T18:31
at 2017-07-09T18:31

By Victoria
at 2017-07-11T21:33
at 2017-07-11T21:33

By Anonymous
at 2017-07-14T00:35
at 2017-07-14T00:35

By William
at 2017-07-16T03:38
at 2017-07-16T03:38

By George
at 2017-07-18T06:40
at 2017-07-18T06:40

By Agatha
at 2017-07-20T09:42
at 2017-07-20T09:42

By Victoria
at 2017-07-22T12:44
at 2017-07-22T12:44

By Emma
at 2017-07-24T15:47
at 2017-07-24T15:47
Related Posts
長輩機推薦與購買處

By Harry
at 2017-06-07T20:45
at 2017-06-07T20:45
網路購買手機問題。。

By Lydia
at 2017-06-07T20:07
at 2017-06-07T20:07
三星S8+ 及 iPhone 7+ 之自由落體試驗

By Ida
at 2017-06-07T20:05
at 2017-06-07T20:05
m8相機 維修

By Zora
at 2017-06-07T19:51
at 2017-06-07T19:51
會出高通S835的雙系統手機嗎?

By Oscar
at 2017-06-07T19:47
at 2017-06-07T19:47