1.JVM
以 .java
為后綴的文件潭千,最終會(huì)被編譯成.class
字節(jié)碼炬丸,運(yùn)行在 jvm 上赊淑;JVM 的作用是將平臺(tái)無關(guān)的 .class
字節(jié)碼翻譯成平臺(tái)無關(guān)的機(jī)器碼本砰;
2.Dalvik
Dalvik 是Google設(shè)計(jì)的用于 Android 平臺(tái)的 虛擬機(jī)碴裙;支持.dex
格式的 java應(yīng)用程序的運(yùn)行; .dex 格式是專為 Dalvik 設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)舔株;
2014年6月25日莺琳,Android L 系統(tǒng)中直接刪除 Dalvik ,用 ART 代替;
Dalvik 與JVM 的區(qū)別:
1.Dalvik 是基于寄存器督笆,Jvm是基于棧的芦昔;
2.Dalvik 運(yùn)行 dex 文件,Jvm 運(yùn)行 java 代碼娃肿;
3.Dalvik 支持 JIT (just-in-time 即時(shí)編譯技術(shù))咕缎,優(yōu)化后的 Dalvik 允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)實(shí)例,并且每一個(gè) Dalvik 應(yīng)用作為一個(gè)獨(dú)立的 Linux 進(jìn)程執(zhí)行料扰;
3.ART
Android Runtime(ART) 是一種在 Android 操作系統(tǒng)上的運(yùn)行環(huán)境凭豪;能夠?qū)⒆止?jié)碼直接轉(zhuǎn)化成機(jī)器碼;
ART 與 Dalvik 的區(qū)別:
1.編譯器
Dalvik 是基于即時(shí)編譯器(JIT)將字節(jié)碼轉(zhuǎn)化成機(jī)器碼晒杈,應(yīng)用每次運(yùn)行都會(huì)執(zhí)行這個(gè)過程嫂伞,會(huì)拖慢應(yīng)用的運(yùn)行效率;
ART 是基于預(yù)編譯(AOT Ahead-Of-Time)將字節(jié)碼轉(zhuǎn)化成機(jī)器碼拯钻,只有在首次安裝的時(shí)候會(huì)執(zhí)行上述過程帖努,這樣會(huì)導(dǎo)致首次安裝變慢,但以后每次啟動(dòng)執(zhí)行的時(shí)候粪般,都會(huì)直接運(yùn)行拼余,提高運(yùn)行效率;
2.占用空間
ART 占用空間比Dalvik大亩歹,字節(jié)碼轉(zhuǎn)化成機(jī)器碼之后匙监,存儲(chǔ)空間會(huì)增大10%~20%,這就是注著名的 " 空間換時(shí)間"小作;
3.性能
ART 明顯改善了電池續(xù)航亭姥,在垃圾回收上也有了較大的提升;