亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的JVM體系結構以及JVM的不同組件介紹

發布時間:2020-06-05 17:01:59 來源:億速云 閱讀:220 作者:Leah 欄目:編程語言

一般大家對JVM的了解可能停留在概念的層面上,而對于JVM的工作機制和體系結構了解相對較少。今天就跟大家聊聊Java中的JVM體系結構以及JVM的不同組件。

什么是JVM?

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

JVM體系結構圖
Java中的JVM體系結構以及JVM的不同組件介紹

JVM如何工作?

如上面的架構圖所示,JVM分為三個主要子系統:
1.類加載器子系統
2.運行時數據區
3.執行引擎

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

1.1加載
類將由該組件加載。引導類裝入器、擴展類裝入器和應用程序類裝入器是有助于實現它的三個類裝入器。

1.引導程序類加載器–負責從引導類路徑加載類,除了rt.jar此加載程序將獲得最高優先級。
2.擴展類加載器–負責加載ext文件夾中的類
3.應用程序類加載器–負責加載應用程序級類路徑、提到的環境變量路徑等。
在加載類文件時,上面的類加載器將遵循委托層次算法。

1.2 鏈接
1.驗證 –字節碼驗證器將驗證生成的字節碼是否正確,如果驗證失敗,我們將收到驗證錯誤。
2.準備-對于所有靜態變量,將使用默認值分配和分配內存。
3.解決-所有符號存儲引用都被方法區域中的原始引用替換。

1.3初始化
這是類加載的最后階段;此處,所有靜態變量將被分配原始值,并執行靜態塊。

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

1..方法區域 – 所有類級別的數據都將存儲在這里,包括靜態變量。每個JVM只有一個方法區域,它是共享資源。
2.堆區– 所有對象及其對應的實例變量和數組將存儲在此處。 每個JVM還有一個堆區。由于“方法”和“堆”區域共享多個線程的內存,因此存儲的數據不是線程安全的。
3.堆棧區域 – 對于每個線程,將創建一個單獨的運行時堆棧。對于每個方法調用,將在堆棧存儲器中創建一個條目,稱為堆棧幀。所有局部變量都將在堆棧存儲器中創建。堆棧區域不是共享資源,因此是線程安全的。 堆棧框架分為三個子實體:

1.局部變量數組– 與該方法相關的涉及多少局部變量,并且相應的值將存儲在此處。
2.操作數棧 –如果需要執行任何中間操作,則操作數堆棧充當執行該操作的運行時工作區。
3.框架數據 – 與該方法相對應的所有符號都存儲在此處。 在任何例外情況下,捕獲塊信息都將保留在幀數據中。
4.PC寄存器 – 每個線程將具有單獨的PC寄存器,一旦執行該指令,將保存當前執行指令的地址,PC寄存器將用下一條指令更新。
5.本機方法堆棧– 本機方法堆棧保存本機方法信息。對于每個線程,將創建一個單獨的本機方法堆棧。

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

1.解釋器 – 解釋器解釋字節碼的速度較快,但執行速度較慢。解釋器的缺點是,當多次調用一種方法時,每次都需要新的解釋。
2.JIT編譯器 – JIT編譯器消除了解釋器的缺點。執行引擎將使用解釋器的幫助來轉換字節碼,但是當重復的代碼時,它將使用JIT編譯器,該編譯器將編譯整個字節碼并將其更改為本地代碼。此本地代碼將直接用于重復的方法調用,從而提高系統的能。

1.中間代碼生成器 – 生成中間代碼
2.代碼優化器 – 負責優化上面生成的中間代碼
3.目標代碼生成器 – 負責生成機器代碼或本機
4.Profiler – 一個特殊的組件,負責查找熱點,即是否多次調用該方法。
3.垃圾收集器: 收集并刪除未引用的對象。可以通過調用System.gc()來觸發垃圾回收,但是不能保證執行。JVM的垃圾收集收集創建的對象。
Java本機接口(JNI): JNI將與本機方法庫進行交互,并提供執行引擎所需的本機庫。

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

看完上述內容,你們對Java中的JVM體系結構以及JVM的不同組件有進一步的了解嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

碌曲县| 来安县| 垣曲县| 台北县| 桑日县| 和田市| 偏关县| 宁蒗| 巴南区| 沈丘县| 枣阳市| 承德县| 三原县| 安义县| 苗栗县| 龙南县| 温宿县| 土默特右旗| 中阳县| 独山县| 南皮县| 建湖县| 齐河县| 兴仁县| 石屏县| 迭部县| 洱源县| 海原县| 富宁县| 龙胜| 嵩明县| 新宁县| 光山县| 连平县| 荣成市| 修水县| 阳城县| 高陵县| 凭祥市| 安徽省| 大英县|