- Android開發(fā)精要
- 范懷宇
- 841字
- 2018-12-31 16:21:48
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核心類庫涵蓋了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來替換,以提高執(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)資料和源代碼。
- Google Flutter Mobile Development Quick Start Guide
- Visual C++程序設(shè)計(jì)教程
- Java范例大全
- ReSharper Essentials
- SQL Server 2016從入門到精通(視頻教學(xué)超值版)
- Python編程完全入門教程
- Java Web程序設(shè)計(jì)
- Java性能權(quán)威指南(第2版)
- 精通網(wǎng)絡(luò)視頻核心開發(fā)技術(shù)
- JavaScript:Moving to ES2015
- Mastering Ext JS
- QGIS Python Programming Cookbook(Second Edition)
- 軟件項(xiàng)目管理實(shí)用教程
- 微前端設(shè)計(jì)與實(shí)現(xiàn)
- Android高級(jí)開發(fā)實(shí)戰(zhàn):UI、NDK與安全