久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

Dalvik

來自站長百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

DalvikGoogle公司自己設(shè)計(jì)用于Android平臺的Java虛擬機(jī)。Dalvik虛擬機(jī)是Google等廠商合作開發(fā)的Android移動設(shè)備平臺的核心組成部分之一。它可以支持已轉(zhuǎn)換為 .dex(即Dalvik Executable)格式的Java應(yīng)用程序的運(yùn)行,.dex格式是專為Dalvik設(shè)計(jì)的一種壓縮格式,適合內(nèi)存處理器速度有限的系統(tǒng)。Dalvik 經(jīng)過優(yōu)化,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例,并且每一個(gè)Dalvik 應(yīng)用作為一個(gè)獨(dú)立的Linux 進(jìn)程執(zhí)行。獨(dú)立的進(jìn)程可以防止在虛擬機(jī)崩潰的時(shí)候所有程序都被關(guān)閉。

Dalvik架構(gòu)

名為dx工具是用來轉(zhuǎn)換Java class成為DEX格式, 但不是全部。多個(gè)類別包含在一個(gè)dex文件之中。多個(gè)類別中重復(fù)的字串和其他常數(shù)包括會存放在DEX之中只有一次,以節(jié)省空間。Java字節(jié)碼(betecode)轉(zhuǎn)換成Dalvik虛擬機(jī)所使用的替代指令集。一個(gè)未壓縮dex文件通常是稍稍小于一個(gè)已經(jīng)壓縮.Jar檔。再次安裝到行動設(shè)備之時(shí),可能會被修改的Dalvik可執(zhí)行檔。為了獲得進(jìn)一步的最佳化,端序(byte order)可能會在一定的數(shù)據(jù)交換,簡單的數(shù)據(jù)結(jié)構(gòu)函數(shù)庫,可內(nèi)聯(lián)(linked inline),空的類別物件可能會短路。當(dāng)Android啟動時(shí),Dalvik VM 監(jiān)視所有的程序(APK),并且創(chuàng)建依存關(guān)系樹,為每個(gè)程序優(yōu)化代碼并存儲在Dalvik緩存中。Dalvik第一次加載后會生成Cache文件,以提供下次快速加載,所以第一次會變得很慢。Dalvik直譯器采用預(yù)先算好的Goto位址,基于每個(gè)指令集OpCode,都固定以64bytes為Memory Alignment。這樣可以節(jié)省一個(gè)指令集OpCode后,要進(jìn)行查表的時(shí)間。為了強(qiáng)化功能, Dalvik還提供了Fast Interpreter。

Dalvik優(yōu)勢

  • Dalvik主要是完成對象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。   
  • Dalvik負(fù)責(zé)進(jìn)程隔離和線程管理,每一個(gè)Android應(yīng)用在底層都會對應(yīng)一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例,其代碼在虛擬機(jī)的解釋下得以執(zhí)行。   
  • 不同于Java虛擬機(jī)運(yùn)行java字節(jié)碼,Dalvik虛擬機(jī)運(yùn)行的是其專有的文件格式Dex   
  • dex文件格式可以減少整體文件尺寸,提高I/o操作的類查找速度。   
  • odex是為了在運(yùn)行過程中進(jìn)一步提高性能,對dex文件的進(jìn)一步優(yōu)化。   
  • 所有的Android應(yīng)用的線程都對應(yīng)一個(gè)Linux線程,虛擬機(jī)因而可以更多的依賴操作系統(tǒng)的線程調(diào)度和管理機(jī)制   
  • 有一個(gè)特殊的虛擬機(jī)進(jìn)程Zygote,他是虛擬機(jī)實(shí)例的孵化器。它在系統(tǒng)啟動的時(shí)候就會產(chǎn)生,它會完成虛擬機(jī)的初始化,庫的加載,預(yù)制類庫和初始化的操作。如果系統(tǒng)需要一個(gè)新的虛擬機(jī)實(shí)例,它會迅速復(fù)制自身,以最快的數(shù)據(jù)提供給系統(tǒng)。對于一些只讀的系統(tǒng)庫,所有虛擬機(jī)實(shí)例都和Zygote共享一塊內(nèi)存區(qū)域。

Dalvik差異

  • Dalvik虛擬機(jī)早期并沒有使用JIT(Just-In-Time)技術(shù). 從 Android 2.2 開始, Dalvik 虛擬機(jī)也支持 JIT.
  • Dalvik虛擬機(jī)有自己的bytecode, 并非使用 Java bytecode.
  • Dalvik 基于暫存器(register),而 JVM 基于堆棧(stack)。
  • Dalvik VM 透過 Zygote 進(jìn)行Class Preloading,Zygote會完成虛擬機(jī)的初始化,也是與 JVM 不同之處。

Dalvik影響

Dalvik的誕生也導(dǎo)致人們開始憂慮Java平臺的第一次大規(guī)模的分道揚(yáng)鑣或許已經(jīng)是進(jìn)行時(shí)了——有人已經(jīng)把Davlik和微軟的JVM以及Sun微軟的訴訟聯(lián)系起來,看Google身上是否也會發(fā)生類似事情;另外一些人則指出,Google并沒有宣稱Dalvik是一個(gè)Java實(shí)現(xiàn),而微軟卻是這樣做的。Sun也對可能帶來的陣營分裂表達(dá)了憂慮情緒,并提出和Google合作來保證Dalvik和JVM之間的兼容性——Google對此的解釋是,Dalvik是對解決目前Java ME平臺上分裂的一次嘗試,也是為了提供一個(gè)擁有較少限制許可證的平臺。甚至還有人懷疑這是否是Sun和Google兩大陣營對Java之未來的一次大規(guī)模較量。

相關(guān)詞條

參考來源