JVM運作時資料區篇
-
- 1.運作時資料區圖
- 2.運作時記憶體介紹
- 3.運作時分區介紹
- 4.運作時線程介紹
1.運作時資料區圖
2.運作時記憶體介紹
- 記憶體是非常重要的系統資源,是硬碟和cpu的中間倉庫及橋梁,承載着作業系統和應用程式的實時運作
- JVM記憶體布局規定了JAVA在運作過程中記憶體申請、配置設定、管理的政策,保證了JVM的高效穩定運作
- 不同的jvm對于記憶體的劃分方式和管理機制存在着部分差異
3.運作時分區介紹
- JVM規定了若幹種程式運作期間會使用到的運作時資料區
- 有一些會随着虛拟機啟動而建立,随着虛拟機退出而銷毀
- 有一些則是與線程對應的,這些與線程對應的資料區域會随着線程開始和結束而建立和銷毀
-
: 堆、堆外記憶體(方法區、永久代或元空間、代碼緩存)紅色的區域為多個線程共享的
-
: 程式計數器、虛拟機棧、本地方法棧灰色的區域為單個線程私有的
-
4.運作時線程介紹
- 線程是一個程式裡的運作單元,JVM允許一個程式有多個線程并行的執行
- 在HotSpot JVM,每個線程都與作業系統的本地線程直接映射。當一個java線程準備好執行以後,此時一個作業系統的本地線程也同時建立,java線程執行終止後,本地線程也會回收
- 作業系統負責所有線程的安排排程到任何一個可用的CPU上。一旦本地線程初始化成功,它就會調用java線程中的run()方法
- 如果你使用jconsole或者任何一個調試工具,都能看到在背景有許多線程在運作。這些背景線程不包括調用main方法的main線程以及所有這個main線程自己建立的線程
- 虛拟機線程L這種線程的操作時需要JVM達到安全點才會出現。這些操作必須在不同的線程中發生的原因是他們都需要JVM達到安全點,這樣堆才不會變化。這種線程的執行包括“stop-the-world”的垃圾收集,線程棧收集,線程挂起以及偏向鎖撤銷
- 周期任務線程:這種線程是時間周期事件的提現(比如中斷),他們一般用于周期性操作的排程執行
- GC線程:這種線程對于JVM裡不同種類的垃圾收集行為提供了支援
- 編譯線程:這種線程在運作時會降位元組碼編譯成本地代碼
- 信号排程線程:這種線程接收信号并發送給JVM,在它内部通過調用适當的方法進行處理