第 3 章 運行時資料區概述及執行緒
微信搜一搜: 全堆疊小劉,獲取文章全套 pdf版本
1、前言
本節主要講的是運行時資料區,也就是下圖這部分,它是在類加載完成后的階段

當我們通過前面的:類的加載 --> 驗證 --> 準備 --> 決議 --> 初始化,這幾個階段完成后,就會用到執行引擎對我們的類進行使用,同時執行引擎將會使用到我們運行時資料區

也就是大廚做飯,我們把大廚后面的東西(切好的菜,刀,調料),比作是運行時資料區,而廚師可以類比于執行引擎,將通過準備的東西進行制作成精美的菜品

2、運行時資料區結構
2.1、運行時資料區與記憶體
記憶體
- 記憶體是非常重要的系統資源,是硬碟和CPU的中間倉庫及橋梁,承載著作業系統和應用程式的實時運行JVM記憶體布局規定了Java在運行程序中記憶體申請、分配、管理的策略,保證了JVM的高效穩定運行,
- 不同的JVM對于記憶體的劃分方式和管理機制存在著部分差異,結合JVM虛擬機規范,來探討一下經典的JVM記憶體布局,
- 我們通過磁盤或者網路IO得到的資料,都需要先加載到記憶體中,然后CPU從記憶體中獲取資料進行讀取,也就是說記憶體充當了CPU和磁盤之間的橋梁
運行時資料區的完整圖

2.2、執行緒的記憶體空間
執行緒的記憶體空間
Java虛擬機定義了若干種程式運行期間會使用到的運行時資料區:
- 其中有一些會隨著虛擬機啟動而創建,隨著虛擬機退出而銷毀,
- 另外一些則是與執行緒一一對應的,這些與執行緒對應的資料區域會隨著執行緒開始和結束而創建和銷毀,
灰色的為單獨執行緒私有的,紅色的為多個執行緒共享的,即:
- 執行緒獨有:獨立包括程式計數器、堆疊、本地方法堆疊
- 執行緒間共享:堆、堆外記憶體(永久代或元空間、代碼快取)

關于 Runtime 類的說明
每個JVM只有一個Runtime實體,即為運行時環境,相當于記憶體結構的中間的那個框框:運行時環境,

3、執行緒
3.1、JVM 執行緒
JVM 執行緒
- 執行緒是一個程式里的運行單元,JVM允許一個應用有多個執行緒并行的執行
- 在Hotspot JVM里,每個執行緒都與作業系統的本地執行緒直接映射
- 當一個Java執行緒準備好執行以后,此時一個作業系統的本地執行緒也同時創建,Java執行緒執行終止后,本地執行緒也會回收
- 作業系統負責將執行緒安排調度到任何一個可用的CPU上,一旦本地執行緒初始化成功,它就會呼叫Java執行緒中的run()方法
- 如果一個執行緒拋例外,并且該執行緒時行程中最后一個守護執行緒,那么行程將停止
3.2、JVM 系統執行緒
JVM系統執行緒
- 如果你使用jconsole或者是任何一個除錯工具,都能看到在后臺有許多執行緒在運行,
- 這些后臺執行緒不包括呼叫public static void main(String [])的main執行緒以及所有這個main執行緒自己創建的執行緒,
這些主要的后臺系統執行緒在Hotspot JVM里主要是以下幾個:
- 虛擬機執行緒:這種執行緒的操作是需要JVM達到安全點才會出現,這些操作必須在不同的執行緒中發生的原因是他們都需要JVM達到安全點,這樣堆才不會變化,這種執行緒的執行型別括"stop-the-world"的垃圾收集,執行緒堆疊收集,執行緒掛起以及偏向鎖撤銷
- 周期任務執行緒:這種執行緒是時間周期事件的體現(比如中斷),他們一般用于周期性操作的調度執行
- GC執行緒:這種執行緒對在JVM里不同種類的垃圾收集行為提供了支持
- 編譯執行緒:這種執行緒在運行時會將位元組碼編譯成到本地代碼
- 信號調度執行緒:這種執行緒接收信號并發送給JVM,在它內部通過呼叫適當的方法進行處理
你只管學習,我來負責記筆記?? 關注公眾號! ,更多筆記,等你來拿,謝謝





轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/164209.html
標籤:Java
上一篇:第六周 python組合資料型別
下一篇:第 5 章 虛擬機堆疊
