天天看點

JVM運作時資料區篇(基礎認知)

JVM運作時資料區篇

    • 1.運作時資料區圖
    • 2.運作時記憶體介紹
    • 3.運作時分區介紹
    • 4.運作時線程介紹

1.運作時資料區圖

JVM運作時資料區篇(基礎認知)
JVM運作時資料區篇(基礎認知)

2.運作時記憶體介紹

  • 記憶體是非常重要的系統資源,是硬碟和cpu的中間倉庫及橋梁,承載着作業系統和應用程式的實時運作
  • JVM記憶體布局規定了JAVA在運作過程中記憶體申請、配置設定、管理的政策,保證了JVM的高效穩定運作
  • 不同的jvm對于記憶體的劃分方式和管理機制存在着部分差異

3.運作時分區介紹

  • JVM規定了若幹種程式運作期間會使用到的運作時資料區
  • 有一些會随着虛拟機啟動而建立,随着虛拟機退出而銷毀
  • 有一些則是與線程對應的,這些與線程對應的資料區域會随着線程開始和結束而建立和銷毀
    JVM運作時資料區篇(基礎認知)
    • 紅色的區域為多個線程共享的

      : 堆、堆外記憶體(方法區、永久代或元空間、代碼緩存)
    • 灰色的區域為單個線程私有的

      : 程式計數器、虛拟機棧、本地方法棧

4.運作時線程介紹

  • 線程是一個程式裡的運作單元,JVM允許一個程式有多個線程并行的執行
  • 在HotSpot JVM,每個線程都與作業系統的本地線程直接映射。當一個java線程準備好執行以後,此時一個作業系統的本地線程也同時建立,java線程執行終止後,本地線程也會回收
  • 作業系統負責所有線程的安排排程到任何一個可用的CPU上。一旦本地線程初始化成功,它就會調用java線程中的run()方法
  • 如果你使用jconsole或者任何一個調試工具,都能看到在背景有許多線程在運作。這些背景線程不包括調用main方法的main線程以及所有這個main線程自己建立的線程
    • 虛拟機線程L這種線程的操作時需要JVM達到安全點才會出現。這些操作必須在不同的線程中發生的原因是他們都需要JVM達到安全點,這樣堆才不會變化。這種線程的執行包括“stop-the-world”的垃圾收集,線程棧收集,線程挂起以及偏向鎖撤銷
    • 周期任務線程:這種線程是時間周期事件的提現(比如中斷),他們一般用于周期性操作的排程執行
    • GC線程:這種線程對于JVM裡不同種類的垃圾收集行為提供了支援
    • 編譯線程:這種線程在運作時會降位元組碼編譯成本地代碼
    • 信号排程線程:這種線程接收信号并發送給JVM,在它内部通過調用适當的方法進行處理