Dalvik虛擬機器探析

來源:互聯網
上載者:User

Dalvik虛擬機器是google專門為android平台開發的一個java虛擬機器,但它並沒有使用JVM規範。Dalvik虛擬機器主要完成對象生命週期的管理、線程管理、安全和異常管理以及記憶體回收等重要功能。

   java虛擬機器和Dalvik虛擬機器的區別:

  java虛擬機器 Dalvik虛擬機器
  java虛擬機器基於棧。 基於棧的機器必須使用指令來載入和操作棧上資料,所需指令更多更多 dalvik虛擬機器是基於寄存器的
  java虛擬機器啟動並執行是java位元組碼。(java類會被編譯成一個或多個位元組碼.class檔案,打包到.jar檔案中,java虛擬機器從相應的.class檔案和.jar檔案中擷取相應的位元組碼) Dalvik啟動並執行是自訂的.dex位元組碼格式。(java類被編譯成.class檔案後,會通過一個dx工具將所有的.class檔案轉換成一個.dex檔案,然後dalvik虛擬機器會從其中讀取指令和資料)
    常量池已被修改為只使用32位的索引,以 簡化解譯器。dalvik的堆和棧的參數可以通過-Xms和-Xmx更改
    一個應用,一個虛擬機器執行個體,一個進程(所有android應用的線程都是對應一個linux線程,都運行在自己的沙箱中,不同的應用在不同的進程中運行。每個android dalvik應用程式都被賦予了一個獨立的linux PID(app_*))

Dalvik虛擬機器架構:

     在android源碼中,Dalvik虛擬機器的實現位於“dalvik/”目錄下,其中“dalvik/vm”是虛擬機器的實現部分,將會編譯成libdvm.so;而"dalvik/libdex"將會編譯成libdex.a靜態庫作為dex工具;“dalvik/dexdump”是.dex檔案的反編譯工具;虛擬機器的可執行程式位於“dalvik/dalvikvm”中,將會編譯成dalvikvm可執行檔。

  dalvik虛擬機器架構:


Android應用編譯及運行流程:

 Dalvik進程管理:

  dalvik進程管理是依賴於linux的進程體繫結構的,如要為應用程式建立一個進程,它會使用linux的fork機制來複製一個進程(複製進程往往比建立進程效率更高)。

    Zygote是一個虛擬機器進程,同時也是一個虛擬機器執行個體的孵化器,它通過init進程啟動。首先會孵化出System_Server(android絕大多系統服務的守護進程,它會監聽socket等待請求命令,當有一個應用程式啟動時,就會向它發出請求,zygote就會FORK出一個新的應用程式進程).每當系統要求執行一個android應用程式時,Zygote就會運用linux的FORK進位產生一個子進程來執行該應用程式。

 JVM和Dalvik進程管理的區別:

........

   linux中處理序間通訊的方式有很多,但是dalvik使用的是訊號方式來完成處理序間通訊。

最後,介紹下android的初始化流程圖

Android的初始化流程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.