关于Dalvik虚拟机你需要知道的15个问题
???Dalvik是Android系統(tǒng)中另一個(gè)重要的部分,包括虛擬機(jī)和一組重要的運(yùn)行環(huán)境。它的設(shè)計(jì)非常巧妙,是個(gè)很好的一個(gè)手機(jī)終端的底層應(yīng)用。本文就簡(jiǎn)單介紹Dalvik相關(guān)的15個(gè)問題。
???????1、大部分jvm是基于棧的,而Dalvik是基于寄存器的。
?????? 基于棧的機(jī)器必須使用指令來載入棧上數(shù)據(jù),或是用指令來操縱數(shù)據(jù),因此指令集更為龐大。但是對(duì)于寄存器指令而言,又必須指定源地址和目的地址,因此,基于寄存器的jvm單個(gè)指令更大。
???????2、Dalvik一些特點(diǎn):
?????? a)常量池32位索引
?????? b)默認(rèn)棧12kb,3個(gè)頁,每頁4kb
?????? c)默認(rèn)啟動(dòng)堆2MB,最大值16MB,最小1MB
???????d)堆最大支持1024MB
?????? e)堆和棧的參數(shù)可以通過-Xms和-Xmx更改
???????3、所有的android線程都對(duì)應(yīng)一個(gè)linux線程。每個(gè)Android Dalvik應(yīng)用程序都運(yùn)行在自己的沙盒里,不同的應(yīng)用在不同的進(jìn)程空間里運(yùn)行。
???????4、Dalvik相當(dāng)于java的JVM,.NET的CLI,Python、Perl、Ruby的Interpreter。Dalvik定義自己的字節(jié)碼為VM的指令。
???????5、目前Dalvik支持的功能:
?????? a).dex文件
?????? b)Dalvik指令集
?????? c)J2ME CLDC API
?????? d)多線程
???????6、Dalvik支持的平臺(tái)有:
?????? a)基于Unix的系統(tǒng)
???????b)Linux
?????? c)BSD
?????? d)Mac OSX
???????7、Dalvik 虛擬機(jī)實(shí)現(xiàn)位于 dalvik/目錄下,dalvik/vm是虛擬機(jī)的實(shí)現(xiàn)部分,被編譯為libdvm.so,而dalvik/libdex被編譯成libdex.a靜態(tài)庫作為dex工具庫;dalvik/dexdump是.dex文件的反編譯工具。虛擬機(jī)的可執(zhí)行程序位于dalvik/dalvikvm中,將被編譯為dalvikvm可執(zhí)行程序。
???????8、Dalvik需要的其他庫:
?????? a)OpenSSl 加密技術(shù)
?????? b)Zlib 免費(fèi)的一般目的數(shù)據(jù)壓縮庫
???????c)ICU 字符編碼技術(shù)
?????? d)java包 包括java.nio,java.lang,java.util
?????? e)Apache Harmony classlibApache HttpClient
???????9、Dalvik虛擬機(jī)的運(yùn)行庫大部分是用可移植的C寫的,除了JNI call bridge。
???????10、Dalvik不遵循java SE和java ME的API規(guī)范,所以不支持AWT或者Swing。
???????11、dalvik/vm/Dvm.mk 中會(huì)根據(jù)dvm_arch來選擇編譯的目標(biāo)集體系結(jié)構(gòu)。
???????12、dx工具:位于dalvik/dx目錄,用于將字節(jié)碼轉(zhuǎn)換成.dex。
?????? 例:dx --dex --output=helloworld.dex helloworld.class
???????13、dexdump工具:位于dalvik/dexdump目錄,用于反編譯dex文件。
???????14、dex數(shù)據(jù)類型:
byte 8bit
ubyte 8bit
short 16bitlittle-endian
ushort 16bit little-endian
int 32bitlittle-endian
uint 32bitlittle-endian
long 64bitlittle-endian
ulong 64bitlittle-endian
sleb128 LEB128 variable-lengtha
uleb128 LEB128 variable-lengtha
uleb128p1 LEB128 variable-lengtha
???????LEB128類型:1~5個(gè)字節(jié)組成。所有字節(jié)組合在一起代表一個(gè)32位值。除最后一個(gè)字節(jié)最高標(biāo)志位為0外,其他都為1,剩下的7位為有效負(fù)荷。有符號(hào)的LEB128的符號(hào)由最后一個(gè)字節(jié)的有效負(fù)荷最高位決定。具體算法在:dalvik/libdex/LEB128.h。
???????15、dex文件被映射到DexMapList,結(jié)構(gòu)體定義在dalvik/libdex/DexFile.h(c) 中。
總結(jié)
以上是生活随笔為你收集整理的关于Dalvik虚拟机你需要知道的15个问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魔兽世界怀旧服虎王邦加拉什宠物该怎么抓
- 下一篇: Dalvik/ART(ANDROID)中