Zygote的分析

Zygote是一個虛擬機進程,同時也是一個虛擬機實例的孵化器,

每當系統要求執行一個Android應用程序,Zygote就會FORK出一個子進程來執行該應用程序。


這樣做的好處顯而易見:Zygote進程是在系統啓動時產生的,

它會完成虛擬機的初始化,庫的加載,

預置類庫的加載和初始化等等操作,


而在系統需要一個新的虛擬機實例時,Zygote通過複製自身

1.最快速的提供個系統。

2.對於一些只讀的系統庫,所有虛擬機實例都和Zygote共享一塊內存區域,大大節省了內存開銷。


Zygote系統代碼組成及其調用結構:

  • Zygote.java

提供訪問Dalvik “zygote”的接口。主要是包裝Linux系統的Fork,以建立一個新的VM實例進程。

  • ZygoteConnection.java

Zygote的套接口連接管理及其參數解析。其他Actvitiy建立進程請求是通過套接口發送命令參數給Zygote

  • ZygoteInit.java

Zygotemain函數入口。


//native 的獲取

 dalvik/vm/native

 

//dalvik_system_Zygote.c

 const DalvikNativeMethod dvm_dalvik_system_Zygote[] =

{

    { "fork",            "()I",        Dalvik_dalvik_system_Zygote_fork },

    { "forkAndSpecialize",            "(II[II[[I)I",        Dalvik_dalvik_system_Zygote_forkAndSpecialize },

    { "forkSystemServer",            "(II[II[[I)I",        Dalvik_dalvik_system_Zygote_forkSystemServer },

    { NULL, NULL, NULL },

};



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章