第一章JVM與Java體系結構

qq_41539807發表於2020-12-08

1.1JVM的整體結構

在這裡插入圖片描述

  • HotSpot VM是目前市面上高效能虛擬機器的代表作之一。
  • 它採用直譯器與及時編譯器並存的架構

1.2JVM的架構模型

java編譯器輸入的指令流基本上是一種基於棧的指令集架構,另外一種指令集架構是基於暫存器的指令集架構

具體來說:這兩種架構之間的區別:

  • 基於棧式架構的特點
    • 設計和實現更簡單,適用於資源受限的系統
      • 避開了暫存器的分配難題:使用零地址指令方式分配
      • 指令流中的指令大部分是零地址指令,其執行過程依賴操作棧。指令集更小,編譯器容易實現
      • 不需要硬體支援,可移植性更好,更好實現跨平臺
  • 基於暫存器架構的特點
    • 典型的應用是x86的二進位制指令集:比如傳統的PC以及Android的的Davlik虛擬機器
      • 指令集架構則完全依賴硬體,可移植性差
      • 效能優秀和執行更高效
      • 花費更少的指令去完成一項操作
      • 在大部分情況下,基於暫存器架構的指令集往往都以一地址指令,二地址指令和三地址指令為主,而基於棧式架構的指令集卻是以零地址指令為主。

1.3JVM的生命週期

虛擬機器啟動

Java虛擬機器的啟動是通過引導類載入器(bootstrap class loader)建立一個初始類(initial class)來完成的,這個類是由虛擬機器的具體實現指定的。

虛擬機器的執行

  • 一個執行中的java虛擬機器有者一個清晰的任務:執行Java程式
  • 程式開始執行時他才執行,程式結束時他就停止
  • 執行一個所謂的Java程式的時候,真真正正在執行的是一個叫做虛擬機器的程式

虛擬機器的退出

  • 程式正常執行結束
  • 程式在執行過程中遇到異常或錯誤而異常終止
  • 由於作業系統出現錯誤而導致Java虛擬機器程式終止
  • 某執行緒呼叫Runtime類或System類的exit方法,或Runtime類的halt方法,並且Java安全管理器也允許這次exit或halt操作
  • 除此之外,JNI(Java Native Interface)規範描述了用JNI Invocation API來載入或解除安裝java虛擬機器時,Java虛擬機器的退出情況。

1.4JVM發展歷程

  • 1996 Sun Classic VM
  • 上面這個JVM只有直譯器
  • 如果使用JIT編譯器,就需要進行外掛,但是一旦使用了JIT編譯器,JIT就會接管虛擬機器的執行系統。直譯器就不再工作。直譯器和編譯器不能配合工作。
  • 現在是hotspot
  • 還有Exact VM
  • BEA的JRockit是世界上最快的JVM
  • IBM的J9

相關文章