JVM虛擬機器記憶體結構簡析

CYH_progress發表於2020-12-18

JVM虛擬機器記憶體結構簡析

一、簡介

​ jvm(Java Virtual Machine),即我們的Java虛擬機器,其記憶體結構可以分為5個部分,即 堆、虛擬機器棧、本地方法棧、方法區、本地計數器。

二、堆

​ 堆區主要存放物件例項及陣列,我們所new出來的物件都存在這個區域。

​ 堆區是所有執行緒共享的,在虛擬機器啟動時建立。

​ 堆區是GC(垃圾回收)最頻繁也是最主要的區域。

三、虛擬機器棧

​ 虛擬機器棧即我們常聽說的棧,用於儲存區域性變數表、動態連結、運算元和方法出口等資訊。

​ 虛擬機器棧是執行緒私有的,生命週期與執行緒一樣。

​ 虛擬機器棧定義了兩種異常型別,StackOverFlowError(棧溢位)和 OutOfMemoryError(記憶體溢位)。

​ 虛擬機器棧主要執行Java方法,方法執行時,建立一個棧幀,攜帶方法相關的區域性變數表、動態連結、運算元和方法出口等資訊入棧,方法結束,棧幀出棧

四、本地方法棧

​ 本地方法棧與虛擬機器棧執行機制相同,只不過一個是執行Java方法,一個是執行native方法。

​ 在很多虛擬機器中(HotSpot),會將兩者一起使用。

五、方法區

​ 方法區是全域性共享的。

​ 方法區儲存了 類的資訊、建構函式、類中的欄位和方法、靜態變數、final常量 等資訊、

​ 在Hotspot虛擬機器中,方法區對應持久代,很少被執行GC,一旦GC主要是對常量池的回收和已載入類的解除安裝。

六、程式計數器

​ 程式計數器是執行緒私有的。

​ 程式計數器是劃分在CPU上的,程式設計師無法操作。

​ 它是JVM在解析 .class位元組碼檔案時,用來記錄執行到哪一行的一個記錄。

​ 如果執行的是native方法,則計數器的值為空。

​ 此記憶體區是唯一不會丟擲OutOfMemoryError的區域。

相關文章