JVM,Dalivk,ART的區別

Dalvik和JVM的主要區別

首先經過介紹Dalvik的時候咱們就知道Dalvik運行的是dex文件,而JVM運行的是class文件。程序員

Dalvik VM是基於寄存器的架構,而JVM是棧機。因此Dalvik VM的好處是能夠作到更好的提早優化(ahead-of-time optimization)。 另外基於寄存器架構的VM執行起來更快,可是代價是更大的代碼長度。 ~~ 基於寄存器架構的虛擬機有這麼多的好處,爲何以前設計JAVA的程序員沒有采用呢,而是採用如今基於棧的架構開發的呢?由於基於棧的虛擬機也有它的優勢,它不對host平臺的寄存器數量作假設,有利於移植到不懂的平臺,這也符合的Java跨平臺的特色。而Dalvik虛擬機則不關心這些,由於它原本就是爲ARM這樣的多寄存器平臺設計的,另外Dalvik被移植到x86機器上,即便x86這種寄存器少的平臺,寄存器架構的虛擬機也能夠運行。 ~~ 通常來講,基於堆棧的機器必須使用指令才能從堆棧上的加載和操做數據,所以,相對基於寄存器的機器,它們須要更多的指令才能實現相同的性能。可是基於寄存器機器上的指令必須通過編碼,所以,它們的指令每每更大。架構

Dalvik在JVM上的優化

在編譯時提早優化代碼而不是等到運行時 虛擬機很小,使用的空間也小;被設計來知足可高效運行多種虛擬機實例。 常量池已被修改成只使用32位的索引,以簡化解釋器 標準Java字節碼實行8位堆棧指令,Dalvik使用16位指令集直接做用於局部變量。局部變量一般來自4位的「虛擬寄存器」區。這樣減小了Dalvik的指令計數,提升了翻譯速度。性能

Dalivk進化之ART

2014年6月25日,Android L 正式亮相於召開的谷歌I/O大會,Android L 改動幅度較大,谷歌將直接刪除Dalvik,代替它的是傳聞已久的ART。優化

ART:即Android Runtime ART 的機制與 Dalvik 不一樣。在Dalvik下,應用每次運行的時候,字節碼都須要經過即時編譯器(just in time ,JIT)轉換爲機器碼,這會拖慢應用的運行效率,而在ART 環境中,應用在第一次安裝的時候,字節碼就會預先編譯成機器碼,使其成爲真正的本地應用。這個過程叫作預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啓動(首次)和執行都會變得更加快速。編碼

ART的優缺點

優勢:翻譯

系統性能的顯著提高。 應用啓動更快、運行更快、體驗更流暢、觸感反饋更及時。 更長的電池續航能力。 支持更低的硬件。設計

缺點:索引

機器碼佔用的存儲空間更大,字節碼變爲機器碼以後,可能會增長10%-20%(不過在應用包中,可執行的代碼經常只是一部分。好比最新的 Google+ APK 是 28.3 MB,可是代碼只有 6.9 MB。) 應用的安裝時間會變長。開發

相關文章
相關標籤/搜索