JVM的整體結構

JVM的整體結構

在這裏插入圖片描述

java代碼執行流程

在這裏插入圖片描述

JVM架構模型

  1. 基於棧式架構的特點
    • 設計和實現更簡單,適用於資源受限的系統;
    • 避開了寄存器的分配難題:使用零地址指令方式分配。
    • 指令流中的指令大部分是零地址指令,其執行過程依賴於操作棧。指令集更小,編譯器容易實現。
    • 不需要硬件支持,可移植性更好,更好實現跨平臺
  2. 基於寄存器架構的特點
    • 典型的應用是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虛擬機的退出情況。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章