《Android虚拟机》----虚拟机概述
No1:
虛擬機是指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離的環境中的完整計算機系統。
No2:
Java虛擬機由如下五個部分組成:一組指令集、一組寄存器、一個棧、一個無用單元收集堆、一個方法區域。
No3:
Java虛擬機中有4種寄存器:
1)pc:Java程序計數器
2)optop:指向操作數棧頂端的指針
3)frame:指向當前執行方法的執行環境的指針
4)vars:指向當前執行方法的局部變量區第一個變量的指針
No4:
Java虛擬機的棧有三個區域:局部變量區、運行環境區、操作數區
No5:
.dex文件格式會把所有的.class文件內容整合到一個文件中。這樣,除了減少整體的文件尺寸,I/O操作,也提高了類的查找速度。原來每個類文件中的常量池,在.dex文件中由一個常量池來管理。
No6:
Zygote是一個虛擬機進程,同時也是一個虛擬機實例的孵化器,每當系統要求執行一個Android應用程序,Zygote就會孵化出一個子進程來執行該應用程序。這樣做的好處顯而易見:Zygote進程是在系統啟動時產生的,它會完成虛擬機的初始化,庫的加載,預置類庫的加載和初始化等操作,而在系統需要一個新的虛擬機實例時,Zygote通過復制自身,最快速地提供一個系統。另外,對于一些只讀的系統庫,所有虛擬機實例都和Zygote共享一塊共享區域,這樣可以大大節省內存開銷。
No7:
系統嘗試預校驗.dex文件中的所有類,從而降低class的負擔,從而可以使用一系列的優化來提升運行性能。這些都是通過dexopt命令來實現的。
No8:
Dalvik VM的實現包括三個獨立的解釋內核:快速、可移植、調試。
快速解釋器是為當前平臺優化的,可能包括手動優化的匯編文件;相對的,可移植解釋器是用C語言寫的,可在廣泛的平臺上使用;調試解釋器是可移植解釋器的變種,包括了支持程序分析和單步。
No9:
No10:
No11:
Dalvik進程管理是依賴于Linux的進程體系結構的,如要為應用程序創建一個進程,它會使用Linux的fork機制來復制一個進程(復制進程往往比創建進程效率更高)。
Zygote是一個虛擬機進程,同事也是一個虛擬機實例的孵化器,通過init進程啟動。首先會孵化出System_Server(Android絕大多系統服務的守護進程,它會監聽socket等待請求命令,當有一個應用程序啟動時,就會向它發出請求,Zygote就會孵化出一個新的應用程序進程)。每當系統要求執行一個Android應用程序時,Zygote就會運用Linux的fork機制產生一個子進程來執行該應用程序。
No12:
Android的初始化流程
No13:
Android中進程總結:
1)系統啟動時init進程會創建Zygote進程,Zygote進程負責后續Android應用程序框架層的其他進程的創建和啟動工作
2)Zygote進程會首先創建一個SystemServer進程,SystemServer進程負責啟動系統的關鍵服務,如包管理服務PackageManagerService和應用程序組件管理服務ActivityManagerService
3)當我們需要啟動一個Android應用程序時,ActivityManagerService會通過Socket進程間通信機制,通知Zygote進程為這個應用程序創建一個新的進程
No14:
Zygote進程是在系統啟動時產生的,它會完成虛擬機的初始化、庫的加載、預置類庫的加載和初始化等操作,而在系統需要一個新的虛擬機實例時。Zygote通過復制自身,最快速的提供個系統。另外,對于一些只讀的系統庫,所有虛擬機實例都和Zygote共享一塊內存區域,大大節省了內存開銷。
當Zygote進程在使用Linux的fork機制時有如下三種不同方式:
1)fork():孕育一個普通的進程,該進程屬于Zygote進程
2)forkAndSpcecialize():孕育一個特殊的進程,該進程不再是Zygote進程
3)forkSystemServer():孕育一個系統服務進程
轉載于:https://www.cnblogs.com/anni-qianqian/p/7661894.html
總結
以上是生活随笔為你收集整理的《Android虚拟机》----虚拟机概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UE4 Xml读写
- 下一篇: android sina oauth2.