JVM體系結構介紹——三各子系統梳理完成

快來查看JVM不同組件的概述以及非常有用的圖表。

這是最近在國外論壇看到一個很實用的介紹,分享給大家哦。

每個Java開發人員都知道字節碼將由JRE(Java運行時環境)執行。但是,許多人並不知道JRE是Java虛擬機(JVM)的實現,它可以分析字節碼,解釋代碼並執行它。作為開發人員,瞭解JVM的體系結構非常重要,因為它使我們能夠更高效地編寫代碼。在本文中,我們將更深入地瞭解Java中的JVM體系結構以及JVM的不同組件。

什麼是JVM?

一個虛擬機是一個軟件實現物理機。Java是根據WORA(可在任何地方運行一次寫入)的概念開發的,該概念可在VM上運行。該編譯器編譯Java文件轉換成一個Java 的.class文件,則該.class文件輸入到JVM,它加載並執行類文件。下圖是JVM的體系結構圖。

JVM體系結構圖

JVM體系結構介紹——三各子系統梳理完成

JVM如何工作?

如上面的架構圖所示,JVM分為三個主要子系統:

  1. ClassLoader子系統
  2. 運行時數據區
  3. 執行引擎

1. ClassLoader子系統

Java的動態類加載功能由ClassLoader子系統處理。它加載,鏈接。並在運行時(而非編譯時)首次引用類時初始化類文件。

1.1加載

類將由此組件加載。BootStrap ClassLoader,擴展ClassLoader和Application ClassLoader是有助於實現該目標的三個ClassLoader。

  1. BootStrap ClassLoader –負責從引導類路徑中加載類,僅用於rt.jar。最高優先級將給予此加載程序。
  2. 擴展ClassLoader –負責加載ext文件夾(jre \\ lib)內的類。
  3. Application ClassLoader –負責加載應用程序級別的類路徑,提到的環境變量路徑等。

上面的ClassLoader在加載類文件時將遵循委託層次算法。

1.2連結

  1. 驗證 -字節碼驗證程序將驗證生成的字節碼是否正確,如果驗證失敗,我們將收到驗證錯誤。
  2. 準備 –將為所有靜態變量分配內存併為其分配默認值。
  3. 解決 –將所有符號內存引用替換為“方法區域”中的原始引用。

1.3初始化

這是ClassLoading的最後階段;在此,所有靜態變量將被分配原始值,並且將執行靜態塊。

2.運行時數據區

運行時數據區分為五個主要部分:

  1. 方法區域 –所有類級別的數據(包括靜態變量)都將存儲在此處。每個JVM只有一個方法區域,它是共享資源。
  2. 堆區 –所有對象及其對應的實例變量和數組將存儲在此處。每個JVM還有一個堆區。由於“方法”和“堆”區域共享多個線程的內存,因此存儲的數據不是線程安全的。
  3. 堆棧區 –對於每個線程,將創建一個單獨的運行時堆棧。對於每個方法調用,將在堆棧存儲器中創建一個條目,稱為堆棧幀。所有局部變量都將在堆棧存儲器中創建。堆棧區域不是共享資源,因此是線程安全的。堆棧框架分為三個子實體:局部變量數組 –與該方法有關,涉及多少局部變量,並且相應的值將存儲在此處。操作數堆棧 –如果需要執行任何中間操作,則操作數堆棧充當執行該操作的運行時工作區。幀數據 –與該方法相對應的所有符號都存儲在此處。在任何例外情況下,捕獲塊信息將保留在幀數據中。
  4. PC寄存器 –每個線程將具有單獨的PC寄存器,以在執行指令後保存當前執行指令的地址,PC寄存器將用下一條指令進行更新。
  5. 本機方法堆棧 –本機方法堆棧保存本機方法信息。對於每個線程,將創建一個單獨的本機方法堆棧。

3.執行引擎

分配給運行時數據區的字節碼將由執行引擎執行。執行引擎讀取字節碼並逐段執行。

  1. 解釋器 –解釋器解釋字節碼的速度較快,但執行速度較慢。解釋器的缺點是,當多次調用一種方法時,每次都需要新的解釋。
  2. JIT編譯器 – JIT編譯器消除了解釋器的缺點。執行引擎將使用解釋器的幫助來轉換字節碼,但是當發現重複的代碼時,它將使用JIT編譯器,該編譯器將編譯整個字節碼並將其更改為本地代碼。此本地代碼將直接用於重複的方法調用,從而提高系統的性能。中間代碼生成器 –產生中間代碼代碼優化器 –負責優化上面生成的中間代碼目標代碼生成器 –負責生成機器代碼或本機代碼Profiler
    –一個特殊的組件,負責查找熱點,即是否多次調用該方法。
  3. 垃圾收集器:收集並刪除未引用的對象。垃圾回收可以通過調用觸發System.gc(),但不能保證執行。JVM的垃圾收集收集創建的對象。

Java本機接口(JNI):JNI將與本機方法庫進行交互,並提供執行引擎所需的本機庫。

本機方法庫:這是本機庫的集合,這是執行引擎所需的。

本文來源:https://dzone.com/articles/jvm-architecture-explained


分享到:


相關文章: