JVM的整體結構
java代碼執行流程
JVM架構模型
- 基於棧式架構的特點
- 設計和實現更簡單,適用於資源受限的系統;
- 避開了寄存器的分配難題:使用零地址指令方式分配。
- 指令流中的指令大部分是零地址指令,其執行過程依賴於操作棧。指令集更小,編譯器容易實現。
- 不需要硬件支持,可移植性更好,更好實現跨平臺
- 基於寄存器架構的特點
- 典型的應用是x86的二進制指令集:比如傳統的PC以及Android的Davlik虛擬機。
- 指令集架構則完全依賴硬件,可移植性差
- 性能優秀和執行更高效;
- 花費更少的指令去完成- -項操作。
- 在大部分情況下,基於寄存器架構的指令集往往都以一-地址指令、二地址指令和三地址指令爲主,而基於棧式架構的指令集卻是以零地址指令爲主。
總結:
由於跨平臺性的設計,Java的指令都是根據棧來設計的。不同平臺CPU架構不同,所以不能設計爲基於寄存器的。優點是跨平臺, 指令集小,編譯器容易實現,缺點是性能下降,實現同樣的功能需要更多的指令。
時至今日,儘管嵌入式平臺已經不是Java程序的主流運行平臺了(準確來說應該是HotSpotVM的宿主環境已經不侷限於嵌入式平臺了),那麼爲什麼不將架構更換爲基於寄存器的架構呢?
棧:
跨平臺性、指令集小、指令多;執行性能比寄存器差
JVM生命週期
虛擬機的啓動
Java虛擬機的啓動是通過引導類加載器(bootstrap class loader) 創建一個初始類(initial class) 來完成的,這個類是由虛擬機的具體實現指定的。
虛擬機的執行
- 一個運行中的Java虛擬機有着- -個清晰的任務:執行Java程序。
- 程序開始執行時他才運行,程序結束時他就停止。
- 執行一個所謂的Java程序的時候,真真正正在執行的是一個叫做Java虛擬機的進程。
虛擬機的退出
- 程序正常執行結束
- 程序在執行過程中遇到了異常或錯誤而異常終止
- 由於操作系統出現錯誤而導致Java虛擬機進程終止
- 某線程調用Runtime類或System類的exit方法,或Runtime類的halt方法,並且Java安全管理器也允許這次exit或halt操作。
- 除此之外,JNI ( Java Native Interface) 規範描述了用JNI Invocation API來加載或卸載Java虛擬機時,Java虛擬機的退出情況。