首頁  >  文章  >  Java  >  JVM中的運行時資料區域是哪些

JVM中的運行時資料區域是哪些

王林
王林轉載
2019-11-26 11:10:262796瀏覽

JVM中的運行時資料區域是哪些

首先看圖:

JVM中的運行時資料區域是哪些

java相關影片教學:java課程

1.程式計數器(PC)

是執行緒獨享的。是一塊較小的內存,是目前執行緒所執行的字節碼的行號指示器,是Java虛擬機規格中唯一沒有被規定OOM(OutOfMemoryError)的區域。

2.Java虛擬機器堆疊

是是執行緒獨享的。生命週期和線程相同。是Java方法執行的記憶體模型。執行每個方法都會建立一個棧幀,用於儲存局部變數和操作數(物件參考)。局部變數所需的記憶體空間大小在編譯期間完成分配。所以堆疊幀的大小是不會改變的。

有兩種例外:

1)若執行緒請求深度大於堆疊的深度,會拋出StackOverFlowError。

2)若棧在動態擴展的時候無法請求足夠的內存,會拋出OOM。

3.堆

JVM中的運行時資料區域是哪些Java堆是所有執行緒共享的。是虛擬機器啟動的時候創建的。存放的是物件的實例和陣列。所佔記憶體最大。分為新生代(Young區)、老年代(Old區)。新生代又分為Eden區、Servior區。 Servior區又分為From space區與To space區。 Eden區和Servior區的記憶體比例為8:1。當擴充記憶體大於可用記憶體的時候,會拋出OOM。

4.本地方法堆疊

#本地方法堆疊是執行緒獨享的。與Java虛擬機器堆疊類似,但不是為Java方法(字節碼)服務,而是為本機非Java方法服務。也會拋出StackOverFlowError和OOM。

5.方法區

方法區是所有執行緒共享的。用於儲存已經被虛擬機器載入的類別資訊、常數、靜態變數等數據,又稱為非堆(Non-Heap)。方法區又稱為“永久代”,GC很少在這個區域進行,但不代表不會回收。這個區域回收目標主要是針對常量池的回收和對類型的卸載。當記憶體申請大於實際可用記憶體時,會拋出OOM。

java相關文章推薦:###java入門#######

以上是JVM中的運行時資料區域是哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除