1. 程式人生 > >Jvm堆、棧、方法區理解

Jvm堆、棧、方法區理解

堆解決的是資料儲存問題,即資料怎麼放,資料放哪。 棧解決程式的執行問題,即程式如何執行,或者說如何處理資料。 方法區則是輔助棧的一塊永久區(perm),解決堆疊資訊的產生,是先決條件。

在這裡插入圖片描述

java堆分為新生代和老年代。 新生代分為:eden、s0、s1區。s0和s1也被稱為from和to區域,他們是兩塊大小相等並且可以互換角色的空間。 在這裡插入圖片描述

java棧是一塊執行緒私有的記憶體空間,一個棧由三部分組成:區域性變量表、運算元棧、幀資料區 區域性變量表:用於報錯函式的引數及區域性變數。 運算元棧:主要儲存計算過程的中間結果,同時作為計算過程中變數臨時的儲存空間。 幀資料區:儲存著訪問常量池的指標,異常處理表也是幀資料區的一部分。 在這裡插入圖片描述

方法區

是一塊所有執行緒共享的記憶體區域,他儲存系統的類資訊,比如類的欄位、方法、常量池等。方法區的大小決定了系統可以儲存多少個類,如果系統定義太多的類,導致方法區溢位,虛擬機器同樣會丟擲記憶體溢位錯誤。方法區可以理解為永久區。