Devik程序,linux程序,執行緒的區別。
阿新 • • 發佈:2019-01-22
Dalvik虛擬機器執行在Linux作業系統之上。Linux作業系統並沒有純粹的執行緒概念,只要兩個程序共享一個地址空間,那麼就可以認為它們是同一個程序的兩個執行緒。Linux系統提供了兩個fork和clone呼叫,其中,前者是用來建立程序的,而後者是用來建立執行緒的。
一般來說,虛擬機器的程序和執行緒都是和目標機器本地作業系統的程序和執行緒一一對應的,這樣的好處是可以使本地作業系統來排程程序和執行緒。
每個Android應用程式程序都有一個Dalvik虛擬機器例項。這樣做得好處是Android應用程式程序之間不會互相影響,也就是說,一個Android應用程式程序的意外終止,不會影響到其他的應用程式程序的正常執行。
每個Android應用程式程序都是由一種稱為Zygote的程序fork出來的。Zygote程序是由init程序啟動起來的,也就是在系統啟動的時候啟動的。Zygnote程序在啟動的時候,會建立一個虛擬機器例項,並且在這個虛擬機器例項將所有的Java核心庫都載入起來。每當Zygote程序需要建立一個Android應用程式程序的時候,它就通過複製自身來實現,也就是通過fork系統呼叫來實現。這些被fork出來的Android應用程式程序,一方面是複製了Zygote程序中的虛擬機器例項,另外一方面是與Zygote程序共享了同一套Java核心庫。這樣不僅Android程式程序的建立很快,而且所有的應用程式都共享同一套Java核心庫而節省了記憶體空間。