0
本文作者: TeaTien | 2014-06-30 17:55 |
在結(jié)束不久的?Google?I/O?大會上,Android下一代操作系統(tǒng)“Android??L”帶來不少驚喜——新系統(tǒng)號稱運(yùn)行更快、更省電。
然而開發(fā)者對這個(gè)新系統(tǒng)也有頗多疑問,比如新的運(yùn)行模式ART對開發(fā)者意味著什么?ART模式能否讓應(yīng)用的體驗(yàn)超越蘋果?我認(rèn)為在ART運(yùn)行方式下“L”的性能提升在15%到80%之間。同時(shí),ART優(yōu)化了垃圾回收方式,執(zhí)行效率比現(xiàn)行的Dalvik提高50%以上,減少了執(zhí)行垃圾回收時(shí)對應(yīng)用帶來的卡頓,使應(yīng)用運(yùn)行更流暢。
而在安全性方面,ART和Dalvik相比,安全模型和基本機(jī)制沒有變化。但ART有一些細(xì)節(jié)改進(jìn),對安全有幫助。比如,安裝時(shí)對dex文件做了更嚴(yán)格的驗(yàn)證。
圖:Android?L?運(yùn)行界面
以下我匯集整理了論壇上開發(fā)者提問最多的6個(gè)問題,一并解答,希望可以幫助開發(fā)者更好滴認(rèn)識這個(gè)全新的系統(tǒng)。
答:主要來自兩方面。
Android應(yīng)用開發(fā)時(shí),生成的Dex文件包含Java的Byte?Code。在Android?L以前,默認(rèn)用Dalvik虛擬機(jī)。應(yīng)用運(yùn)行時(shí),Dalvik對Java?Byte?Code進(jìn)行解釋執(zhí)行,或進(jìn)行Junt-In-Time的編譯。在Android?L里,應(yīng)用安裝時(shí),用系統(tǒng)工具dex2oat將安裝包中的Dex文件編譯為ELF格式的執(zhí)行文件(.oat文件)。應(yīng)用運(yùn)行時(shí)直接執(zhí)行二進(jìn)制指令。
垃圾回收主要有兩種:
(1)gc_concurrent。執(zhí)行時(shí),Dalvik會在本次gc的開始和結(jié)束時(shí)會短時(shí)間暫停代碼的執(zhí)行。
(2)gc_for_alloc。執(zhí)行時(shí),會較長時(shí)間中斷Java代碼的運(yùn)行。在ART里,執(zhí)行g(shù)c_concurrent時(shí),只會暫停代碼一次。執(zhí)行g(shù)c_for_alloc時(shí),中斷Java代碼運(yùn)行的時(shí)間大大縮小了。總體上講,ART里垃圾回收占用的開銷比Dalvik少50%以上。減少了垃圾回收時(shí)對應(yīng)用帶來的卡頓,使應(yīng)用運(yùn)行更流暢。
答:對絕大多數(shù)開發(fā)者來說,不需要。不論虛擬機(jī)是Dalvik還是ART,安裝包里所包含的仍然是Dex文件。由Dex文件編譯為二進(jìn)制文件的工作是在應(yīng)用安裝時(shí),由裝在設(shè)備上的系統(tǒng)工具dex2oat完成的。
答:可以。事實(shí)上,應(yīng)用安裝后,編譯生成的.oat文件中,包含了原始的Dex文件。保留Dex文件有兩個(gè)原因:
正由于這個(gè)原因,編譯生成的.oat文件,大小是原始的Dex文件的兩倍以上。
答:取決于具體的應(yīng)用。在Google?I/O上,Google給的例子是提升兩倍以上。
ART我們實(shí)際測試下來,性能提升在15%到80%之間。對于大量使用CPU的應(yīng)用,性能提升比較明顯。但如果應(yīng)用程序的時(shí)間主要花在調(diào)用系統(tǒng)API,提升會小一些。因?yàn)楹芏嘞到y(tǒng)API的代碼主要在底層的.so里面。
答:ART和Dalvik相比,安全模型和基本機(jī)制沒有變化。但ART有一些細(xì)節(jié)改進(jìn),對安全有幫助。比如:
答:主要有這么幾個(gè):
總體來說,Android?L十分值得我們期待,今年秋天Google將推出正式版本,不過鑒于目前Android系統(tǒng)碎片化的現(xiàn)狀,當(dāng)前大部分手機(jī)無法升級,只能購買新款手機(jī)。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。