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