執行時資料區概述
記憶體是非常重要的系統資源,承載著作業系統和應用程式的實時執行。JVM記憶體佈局規定了Java在執行過程中記憶體申請、分配、管理的策略,保證了JVM高效穩定的執行。不同的JVM對記憶體的劃分方式和管理機制存在著部分差異。結合JVM虛擬機器規範,來討論下經典的JVM記憶體佈局。
Java虛擬機器定義了若干種程式執行期間會使用到的資料區,其中有一些會隨著虛擬機器的啟動而建立,隨著虛擬機器的退出而銷燬。另外一些則是與執行緒一一對應的,這些與執行緒對應的資料區域會隨著執行緒的開始而建立,執行緒的結束而銷燬。對於一個程序而言,它的方法區和堆記憶體只有一份,但是PC、本地方法棧、虛擬機器棧組數和執行緒數相關。如下圖:灰色的為單獨執行緒私有的,紅色的為多個執行緒共享的:
關於JVM裡面常見的執行緒:
- 虛擬機器執行緒:這種執行緒的操作是需要JVM到達安全點才會出現,這些操作必須在不同的執行緒中,發生的原因是他們都需要JVM到達安全點,這樣堆才不會變化。
- 週期任務執行緒:這種執行緒是時間週期事件的體現(比如中斷),他們一般用於週期性操作的排程執行。
- GC執行緒:提供垃圾回收支援,專門提供GC的。
- 編譯執行緒:這種執行緒在執行時會將位元組碼編譯成原生代碼
- 訊號排程處理:這種執行緒接收訊號併傳送給JVM,在它內部透過呼叫適當的方法進行處理。