「JVM系列」 從一到掌握JVM系列之執行時資料區概述

執行緒

執行緒是一個程式裡的執行單元。JVM 允許一個應用有多個執行緒並行的執行。 在 Hotspot JVM 裡,每個執行緒都與作業系統的本地執行緒直接對映。

當一個 Java 執行緒準備好執行以後,此時一個作業系統的本地執行緒也同時建立。Java 執行緒執行終止後,本地執行緒也會回收。

作業系統負責所有執行緒的安排排程到任何一個可用的 CPU 上。一旦本地執行緒初始化成功,它就會呼叫 Java 執行緒中的run() 方法。

Java記憶體分割槽介紹

java虛擬機器定了若干種程式執行期間會使用到的執行時資料區,其中有一些會隨著虛擬機器啟動而建立,隨著虛擬機器退出而銷燬。另外一些則是與執行緒一一對應的,這些與執行緒對應的資料區域會隨著執行緒開始和結束而建立和銷燬。 如圖,灰色的區域為單獨執行緒私有的,紅色的為多個執行緒共享的,即

「JVM系列」 從一到掌握JVM系列之執行時資料區概述

Java中的執行緒與程序

每個執行緒:獨立包括程式計數器、棧、本地棧

執行緒間共享:堆、堆外記憶體(方法區、永久代或元空間、程式碼快取)

Java執行緒

執行緒是一個程式裡的執行單元,JVM允許一個程式有多個執行緒並行的執行;

在HotSpot JVM,每個執行緒都與作業系統的本地執行緒直接對映。 當一個java執行緒準備好執行以後,此時一個作業系統的本地執行緒也同時建立。java執行緒執行終止後。本地執行緒也會回收。

作業系統負責所有執行緒的安排排程到任何一個可用的CPU上。一旦本地執行緒初始化成功,它就會呼叫java執行緒中的run()方法。

JVM系統執行緒分類

如果你使用jconsole或者任何一個除錯工具,都能看到在後臺有許多執行緒在執行。這些後臺執行緒不包括呼叫main方法的main執行緒以及所有這個main執行緒自己建立的執行緒;

這些主要的後臺系統執行緒在HotSpot JVM裡主要是以下幾個:

虛擬機器執行緒:這種執行緒的操作時需要JVM達到安全點才會出現。這些操作必須在不同的執行緒中發生的原因是他們都需要JVM達到安全點,這樣堆才不會變化。這種執行緒的執行包括“stop-the-world”的垃圾收集,執行緒棧收集,執行緒掛起以及偏向鎖撤銷

週期任務執行緒:這種執行緒是時間週期事件的提現(比如中斷),他們一般用於週期性操作的排程執行。

GC執行緒:這種執行緒對於JVM裡不同種類的垃圾收集行為提供了支援

編譯執行緒:這種執行緒在執行時會降位元組碼編譯成原生代碼

訊號排程執行緒:這種執行緒接收訊號併發送給JVM,在它內部透過呼叫適當的方法進行處理。

JVM系統執行緒

如果你使用 console 或者是任何一個除錯工具,都能看到在後臺有許多執行緒在執行。這些後臺執行緒不包括呼叫 public static void main(String[]) 的 main 執行緒以及所有這個main執行緒自己建立的執行緒。這些主要的後臺系統執行緒在 Hotspot JVM 裡主要是以下幾個:

虛擬機器執行緒:這種執行緒的操作是需要 JVM 達到安全點才會出現。這些操作必須在不同的執行緒中發生的原因是他們都需要JVM達到安全點,這樣堆才不會變化。這種執行緒的執行型別包括 “stop-the-world” 的垃圾收集,執行緒棧收集,執行緒掛起以及偏向鎖撤銷。

週期任務執行緒:這種執行緒是時間週期事件的體現(比如中斷),他們一般用於週期性操作的排程執行。

GC 執行緒:這種執行緒對在 JVM 裡不同種類的垃圾收集行為提供了支援。

編譯執行緒:這種執行緒在執行時會將位元組碼編譯成到原生代碼。

訊號排程執行緒:這種執行緒接收訊號併發送給 JVM,在它內部透過呼叫適當的方法進行處理。

執行時資料區概述

執行時資料區,它是在類載入完成後的階段,如果對類載入不是很熟悉的小夥伴,可以看我上一篇文章。

「JVM系列」 從一到掌握JVM系列之執行時資料區概述

當我們透過前面的: 類的

載入

->

驗證

->

準備

->

解析

->

初始化

這幾個階段完成後,就會用到執行引擎對我們的類進行使用,同時執行引擎將會使用到我們執行時資料區,如下

「JVM系列」 從一到掌握JVM系列之執行時資料區概述

記憶體是非常重要的系統資源,是硬碟和 CPU 的中間倉庫及橋樑,承載著作業系統和應用程式的實時執行 JVM 記憶體佈局規定了 Java 在執行過程中記憶體申請、分配、管理的策略,保證了 JVM 的高效穩定執行。不同的 JVM 對於記憶體的劃分方式和管理機制存在著部分差異。結合 JVM 虛擬機器規範,來探討一下經典的 JVM 記憶體佈局。

我們透過磁碟或者網路 IO 得到的資料,都需要先載入到記憶體中,然後 CPU 從記憶體中獲取資料進行讀取,也就是說記憶體充當了 CPU 和磁碟之間的橋樑

首先還是一張執行時資料區的完整圖:

「JVM系列」 從一到掌握JVM系列之執行時資料區概述

Java 虛擬機器定義了若干種程式執行期間會使用到的執行時資料區,其中有一些會隨著虛擬機器啟動而建立,隨著虛擬機器退出而銷燬。另外一些則是與執行緒一一對應的,這些與執行緒對應的資料區域會隨著執行緒開始和結束而建立和銷燬。 灰色的為單獨執行緒私有的,紅色的為多個執行緒共享的。即:

每個執行緒:獨立包括程式計數器、棧、本地棧。

執行緒間共享:堆、堆外記憶體(永久代或元空間、程式碼快取)

總結