Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發環境 >> 關於Dalvik虛擬機你需要知道的15個問題

關於Dalvik虛擬機你需要知道的15個問題

編輯:Android開發環境

       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) 中。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved