android -------- java虚拟机和Dalvik虚拟机
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
java虛擬機(jī)
虛擬機(jī)是一種抽象化的計(jì)算機(jī),通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的。Java虛擬機(jī)有自己完善的硬體架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。Java虛擬機(jī)屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。
?
Java虛擬機(jī)(Java Virtual Machine 簡稱JVM)是運(yùn)行所有Java程序的抽象計(jì)算機(jī),是Java語言的運(yùn)行環(huán)境,它是Java 最具吸引力的特性之一。
?
Dalvik虛擬機(jī)
Dalvik是Google公司自己設(shè)計(jì)用于Android平臺(tái)的虛擬機(jī)。Dalvik虛擬機(jī)是Google等廠商合作開發(fā)的Android移動(dòng)設(shè)備平臺(tái)的核心組成部分之一。它可以支持已轉(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)閉。
?
DVM虛擬機(jī)Dalvik?Virtual Machine,是安卓中使用的虛擬機(jī)。全部安卓程序都運(yùn)行在安卓系統(tǒng)進(jìn)程里。每一個(gè)進(jìn)程相應(yīng)著一個(gè)Dalvik虛擬機(jī)實(shí)例。
?
Dalvik和標(biāo)準(zhǔn)Java虛擬機(jī)(JVM)的區(qū)別
java虛擬機(jī)基于棧。
java虛擬機(jī)運(yùn)行的是java字節(jié)碼。
java類會(huì)被編譯成一個(gè)或多個(gè)字節(jié)碼.class文件,打包到.jar文件中,java虛擬機(jī)從相應(yīng)的.class文件和.jar文件中獲取相應(yīng)的字節(jié)碼
?
dalvik虛擬機(jī)是基于寄存器的
Dalvik虛擬機(jī)運(yùn)行的是Dalvik字節(jié)碼
java類被編譯成.class文件后,會(huì)通過一個(gè)dx工具將所有的.class文件轉(zhuǎn)換成一個(gè).dex文件,然后dalvik虛擬機(jī)會(huì)從其中讀取指令和數(shù)據(jù)
?
?
Dalvik和Java之間的另外一大區(qū)別就是運(yùn)行環(huán)境——Dalvik經(jīng)過優(yōu)化,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例,并且每一個(gè) Dalvik應(yīng)用作為一個(gè)獨(dú)立的Linux進(jìn)程執(zhí)行。
?
dalvik虛擬機(jī)架構(gòu):
??
?
Android應(yīng)用編譯及運(yùn)行流程:
?
?
java虛擬機(jī)與Dalvik虛擬機(jī)架構(gòu)不同。java虛擬機(jī)基于棧架構(gòu)。程序在運(yùn)行時(shí)虛擬機(jī)需要頻繁的從棧上讀取或?qū)懭霐?shù)據(jù)。這過程需要更多的指令分派與內(nèi)存訪問次數(shù),會(huì)耗費(fèi)不少CPU時(shí)間,對于像手機(jī)設(shè)備資源有限的設(shè)備來說,這是相當(dāng)大的一筆開銷。Dalvik虛擬機(jī)基于寄存器架構(gòu),數(shù)據(jù)的訪問通過寄存器間直接傳遞,這樣的訪問方式比基于棧方式快的多.
?
Dalvik和Java運(yùn)行環(huán)境的區(qū)別
?
1:Dalvik主要是完成對象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。
?
2:Dalvik負(fù)責(zé)進(jìn)程隔離和線程管理,每一個(gè)Android應(yīng)用在底層都會(huì)對應(yīng)一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例,其代碼在虛擬機(jī)的解釋下得以執(zhí)行。
?
3:不同于Java虛擬機(jī)運(yùn)行java字節(jié)碼,Dalvik虛擬機(jī)運(yùn)行的是其專有的文件格式Dex
?
4:dex文件格式可以減少整體文件尺寸,提高I/o操作的類查找速度。
?
5:odex是為了在運(yùn)行過程中進(jìn)一步提高性能,對dex文件的進(jìn)一步優(yōu)化。
?
6:所有的Android應(yīng)用的線程都對應(yīng)一個(gè)Linux線程,虛擬機(jī)因而可以更多的依賴操作系統(tǒng)的線程調(diào)度和管理機(jī)制
?
7:有一個(gè)特殊的虛擬機(jī)進(jìn)程Zygote,他是虛擬機(jī)實(shí)例的孵化器。它在系統(tǒng)啟動(dòng)的時(shí)候就會(huì)產(chǎn)生,它會(huì)完成虛擬機(jī)的初始化,庫的加載,預(yù)制類庫和初始化的操作。如果系統(tǒng)需要一個(gè)新的虛擬機(jī)實(shí)例,它會(huì)迅速復(fù)制自身,以最快的數(shù)據(jù)提供給系統(tǒng)。對于一些只讀的系統(tǒng)庫,所有虛擬機(jī)實(shí)例都和Zygote共享一塊內(nèi)存區(qū)域。
轉(zhuǎn)載于:https://my.oschina.net/zhangqie/blog/1803111
總結(jié)
以上是生活随笔為你收集整理的android -------- java虚拟机和Dalvik虚拟机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在2018年iOS应用程序发展趋势
- 下一篇: BugkuCTF web2