官术网_书友最值得收藏!

1.1.3 運(yùn)行時(shí)

和所有的Java程序運(yùn)行平臺(tái)一樣,為了實(shí)現(xiàn)Java程序在運(yùn)行階段的二次編譯,Android為它們提供了運(yùn)行時(shí)(Runtime)的支撐。

Android的運(yùn)行時(shí)由Java核心類庫和Java虛擬機(jī)Dalvik共同構(gòu)成。Java核心類庫它的主要實(shí)現(xiàn)來自于開源項(xiàng)目Apache Harmony,其官方主頁是:http://harmony.apache.org。涵蓋了Android框架層和應(yīng)用層所要用到的基礎(chǔ)Java庫,包括Java對(duì)象庫、文件管理庫、網(wǎng)絡(luò)通信庫,等等。

Dalvik是為Android量身打造的Java虛擬機(jī),負(fù)責(zé)動(dòng)態(tài)解析執(zhí)行應(yīng)用、分配空間、管理對(duì)象生命周期等工作。如果說框架層是整個(gè)Android的大腦,決定了Android應(yīng)用的設(shè)計(jì)特征,那么,Dalvik就是Android的心臟,為Android的應(yīng)用提供動(dòng)力,決定它們的執(zhí)行效率。

與為低端移動(dòng)設(shè)備而設(shè)計(jì)的J2ME虛擬機(jī)不同,Dalvik是專門為高端設(shè)備而優(yōu)化設(shè)計(jì)的。它沒有采用基于棧的虛擬機(jī)架構(gòu),而是采取了基于寄存器的虛擬機(jī)架構(gòu)設(shè)計(jì)。通常來說,基于棧的虛擬機(jī)對(duì)硬件的依賴程度小、生成的應(yīng)用更節(jié)約空間,可以適配更多的低端設(shè)備;而基于寄存器的虛擬機(jī),對(duì)硬件的門檻會(huì)更高一些,編譯出的應(yīng)用可能會(huì)耗費(fèi)稍多的存儲(chǔ)空間,但它的執(zhí)行效率更高,更能夠發(fā)揮高端硬件(主要指處理器)的能力。

Dalvik沒有沿用傳統(tǒng)的Java二進(jìn)制碼(Java Bytecode)作為其一次編譯的中間文件,而是應(yīng)用了新的二進(jìn)制碼格式文件.dex。在Android應(yīng)用的編譯過程中,它會(huì)先生成若干個(gè).class文件,然后統(tǒng)一轉(zhuǎn)換成一個(gè).dex文件。在轉(zhuǎn)換過程中,Android會(huì)對(duì)部分.class文件中的指令做轉(zhuǎn)義,使用Dalvik特有的指令集OpCodes參見如下鏈接:http://developer.android.comreference/dalvik/bytecode/Opcodes.html。來替換,以提高執(zhí)行效率。同時(shí),.dex會(huì)整合多個(gè).class文件中的重復(fù)信息,并對(duì)冗余部分做全局的優(yōu)化和調(diào)整,合并重復(fù)的常量定義,以節(jié)約常量池耗費(fèi)的空間。這使得最終得到的.dex文件通常會(huì)比將.class文件壓縮打包得出的.jar文件更精簡。

為了提升Android應(yīng)用的執(zhí)行效率,從垃圾回收器(Garbage Collection,GC)到編譯器,Dalvik一直在各個(gè)方面進(jìn)行優(yōu)化。經(jīng)常可以聽到這樣的消息:“新版本的Android系統(tǒng),比上一個(gè)版本的效率高了x倍。”這大都是改善Dalvik的效果。在Android 2.2中,Dalvik引入了對(duì)JIT(Just-in-time)編譯的支持,將上層應(yīng)用的執(zhí)行效率提升了2~4倍,開啟了Android發(fā)展的新篇章。

由于對(duì)于大部分應(yīng)用開發(fā)者而言,無須了解Android運(yùn)行時(shí)的具體細(xì)節(jié),因此,本書后續(xù)將不會(huì)詳細(xì)介紹Android運(yùn)行時(shí)的相關(guān)內(nèi)容,有興趣的讀者,可以另行查閱相關(guān)資料和源代碼維基百科是學(xué)習(xí)Dalvik的一個(gè)不錯(cuò)途徑:http://en.wikipedia.org/wiki/Dalvik_(software)。

主站蜘蛛池模板: 湄潭县| 铁岭县| 贵州省| 石家庄市| 枣强县| 门头沟区| 竹北市| 渭南市| 吐鲁番市| 特克斯县| 津南区| 泽库县| 德清县| 东乌珠穆沁旗| 岚皋县| 枣阳市| 富锦市| 澄城县| 方山县| 西乡县| 霍城县| 乌兰浩特市| 顺义区| 石渠县| 葫芦岛市| 西昌市| 车致| 新密市| 长寿区| 大同市| 江油市| 凤翔县| 鞍山市| 富阳市| 丹凤县| 白水县| 韶山市| 宝清县| 饶平县| 德格县| 泰来县|