程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JVM 架構解讀,jvm架構解讀

JVM 架構解讀,jvm架構解讀

編輯:JAVA綜合教程

JVM 架構解讀,jvm架構解讀


每個Java開發人員都知道字節碼由JRE(Java運行時環境)執行。但許多人不知道JRE是Java Virtual Machine(JVM)的實現,它分析字節碼,解釋代碼並執行它。作為開發人員,我們應該知道JVM的架構是非常重要的,因為它使我們能夠更有效地編寫代碼。在本文中,我們將更深入地了解Java中的JVM架構和JVM的不同組件。

什麼是JVM?

Virtual Machine是物理機器的軟件實現。Java是用在VM上運行的WORA(Write Once Run Anywhere)概念而開發的。編譯器將Java文件編譯為Java .class文件,然後將.class文件輸入到JVM中,JVM會加載並執行類文件。下面是JVM的架構圖。

JVM如何工作?

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

1.類加載器子系統

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

1.1加載

類將通過此組件加載。Boot Strap Class Loader,Extension Class Loader和Application Class Loader是有助於實現的三個類加載器。

上面的類記載器在加載類文件時遵循Delegation Hierarchy 算法。

1.2鏈接

1.3初始化

這是類加載的最後階段,這裡所有的靜態變量都將被賦予原始值,並執行靜態塊。

2.運行時數據區

運行時數據區分為5個主要組件:

方法區——所有的類級別數據將存儲在這裡,包括靜態變量。每個JVM只有一個方法區,並且它是一個共享資源。

堆區域——所有對象及其對應的實例變量和數組將存儲在這裡。每個JVM也有一個堆區域。由於方法和堆區域共享多個線程的內存,因此所存儲的數據非線程安全。

堆棧區——對於每個線程,將創建一個單獨的運行時棧。對於每個方法調用,將在堆棧存儲器中產生一個條目,稱為堆棧幀。所有局部變量將在堆棧內存中創建。堆棧區域是線程安全的,因為它不是共享資源。堆棧幀分為三個子元素:

PC寄存器——每個線程都有單獨的PC寄存器,用於保存當前執行指令的地址,一旦指令執行,PC寄存器將更新到下一條指令。

本地方法堆棧——本地方法堆棧保存本地方法信息。對於每個線程,將創建一個單獨的本地方法堆棧。

3.執行引擎

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

解釋器——解釋器解釋字節碼較快,但執行慢。解釋器的缺點是當一個方法被多次調用時,每次都需要新的解析。

JIT編譯器——JIT編譯器消除了解釋器的缺點。執行引擎將在轉換字節碼時使用解釋器的幫助,但是當它發現重復的代碼時,它使用JIT編譯器,編譯器會編譯整個字節碼並將其更改為本地代碼。這個本地代碼將直接用於重復的方法調用,從而提高系統性能。

垃圾收集器:收集和刪除未引用的對象。可以通過調用“System.gc()”觸發垃圾收集器,但不能保證執行。JVM的垃圾回收收集創建的對象。

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

本地方法庫:它是執行引擎所需的本地庫的集合。

學習Java的同學注意了!!! 
學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:454297367 我們一起學Java!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved