快來查看JVM不同組件的概述以及非常有用的圖表。
這是最近在國外論壇看到一個很實用的介紹,分享給大家哦。
每個Java開發人員都知道字節碼將由JRE(Java運行時環境)執行。但是,許多人并不知道JRE是Java虛擬機(JVM)的實現,它可以分析字節碼,解釋代碼并執行它。作為開發人員,了解JVM的體系結構非常重要,因為它使我們能夠更高效地編寫代碼。在本文中,我們將更深入地了解Java中的JVM體系結構以及JVM的不同組件。
什么是JVM?
一個虛擬機是一個軟件實現物理機。Java是根據WORA(可在任何地方運行一次寫入)的概念開發的,該概念可在VM上運行。該編譯器編譯Java文件轉換成一個Java 的.class文件,則該.class文件輸入到JVM,它加載并執行類文件。下圖是JVM的體系結構圖。
JVM體系結構圖
JVM如何工作?
如上面的架構圖所示,JVM分為三個主要子系統:
ClassLoader子系統
運行時數據區
執行引擎
1. ClassLoader子系統
Java的動態類加載功能由ClassLoader子系統處理。它加載,鏈接。并在運行時(而非編譯時)首次引用類時初始化類文件。
1.1加載
類將由此組件加載。BootStrap ClassLoader,擴展ClassLoader和Application ClassLoader是有助于實現該目標的三個ClassLoader。
BootStrap ClassLoader –負責從引導類路徑中加載類,僅用于rt.jar。最高優先級將給予此加載程序。
擴展ClassLoader –負責加載ext文件夾(jre \ lib)內的類。
Application ClassLoader –負責加載應用程序級別的類路徑,提到的環境變量路徑等。
上面的ClassLoader在加載類文件時將遵循委托層次算法。
1.2連結
驗證 -字節碼驗證程序將驗證生成的字節碼是否正確,如果驗證失敗,我們將收到驗證錯誤。
準備 –將為所有靜態變量分配內存并為其分配默認值。
解決 –將所有符號內存引用替換為“方法區域”中的原始引用。
1.3初始化
這是ClassLoading的最后階段;在此,所有靜態變量將被分配原始值,并且將執行靜態塊。
2.運行時數據區
運行時數據區分為五個主要部分:
方法區域–所有類級別的數據(包括靜態變量)都將存儲在此處。每個JVM只有一個方法區域,它是共享資源。
堆區–所有對象及其對應的實例變量和數組將存儲在此處。每個JVM還有一個堆區。由于“方法”和“堆”區域共享多個線程的內存,因此存儲的數據不是線程安全的。
堆棧區–對于每個線程,將創建一個單獨的運行時堆棧。對于每個方法調用,將在堆棧存儲器中創建一個條目,稱為堆棧幀。所有局部變量都將在堆棧存儲器中創建。堆棧區域不是共享資源,因此是線程安全的。堆棧框架分為三個子實體:局部變量數組 –與該方法有關,涉及多少局部變量,并且相應的值將存儲在此處。操作數堆棧 –如果需要執行任何中間操作,則操作數堆棧充當執行該操作的運行時工作區。幀數據 –與該方法相對應的所有符號都存儲在此處。在任何例外情況下,捕獲塊信息將保留在幀數據中。
PC寄存器 –每個線程將具有單獨的PC寄存器,以在執行指令后保存當前執行指令的地址,PC寄存器將用下一條指令進行更新。
本機方法堆棧 –本機方法堆棧保存本機方法信息。對于每個線程,將創建一個單獨的本機方法堆棧。
3.執行引擎
分配給運行時數據區的字節碼將由執行引擎執行。執行引擎讀取字節碼并逐段執行。
解釋器–解釋器解釋字節碼的速度較快,但執行速度較慢。解釋器的缺點是,當多次調用一種方法時,每次都需要新的解釋。
JIT編譯器– JIT編譯器消除了解釋器的缺點。執行引擎將使用解釋器的幫助來轉換字節碼,但是當發現重復的代碼時,它將使用JIT編譯器,該編譯器將編譯整個字節碼并將其更改為本地代碼。此本地代碼將直接用于重復的方法調用,從而提高系統的性能。中間代碼生成器–產生中間代碼代碼優化器–負責優化上面生成的中間代碼目標代碼生成器–負責生成機器代碼或本機代碼Profiler–一個特殊的組件,負責查找熱點,即是否多次調用該方法。
垃圾收集器:收集并刪除未引用的對象。垃圾回收可以通過調用觸發System.gc(),但不能保證執行。JVM的垃圾收集收集創建的對象。
Java本機接口(JNI):JNI將與本機方法庫進行交互,并提供執行引擎所需的本機庫。
本機方法庫:這是本機庫的集合,這是執行引擎所需的。
-
編譯器
+關注
關注
1文章
1642瀏覽量
49292 -
JVM
+關注
關注
0文章
158瀏覽量
12262
發布評論請先 登錄
相關推薦
簡述光刻工藝的三個主要步驟
plc控制系統由哪三個組成
自動發電控制系統具有三個基本功能
電磁頻譜管理系統通常由哪三個分系統組成
基本理想電路元件的三個特征是什么
三相交流電源是三個什么組成
模數轉換器的三個主要技術指標是什么
對稱三相電壓的特點是哪三個方面
聊聊JVM如何優化
![聊聊<b class='flag-5'>JVM</b>如何優化](https://file1.elecfans.com//web2/M00/00/A3/wKgZomawoA-AOQIdAAK39Pff6v0538.png)
評論