jvm記憶體分布

2022-09-11 22:27:28 字數 735 閱讀 9229

jvm 1.7 版本:

jvm 的記憶體分為堆和非堆兩大部分。

堆:堆分為 新生代和老年代。一般物件都會在新生代的記憶體中建立,新生代中的物件經過幾次的gc **後依然存活(這個次數可以設定)則移動到老年代。新生代和老年代的記憶體不足時都會觸發gc。新生代的gc 的方法一般為複製清理,而老年代則多為標記清理。方法不一樣時根據這兩個分代區域記憶體的特點來採用的。

-xms512m 堆初始化的記憶體大小,-xmx1024m 堆最大的記憶體為1024m  -xmn512m  新生代的空間大小。

非堆:程式計數器:用來記錄執行緒執行到了哪一步(記錄指令)。所以每個執行緒都會有獨立的計數器

虛擬機器棧:記錄方法執行時的資訊,也是執行緒獨立的。  -xss128k  設定執行緒棧的深度(也就是執行緒可以使用的記憶體大小),超出時丟擲stackoverflowerror。

本地方法棧:和虛擬機器棧一樣,不過用於native 方法。

方法區:也就是所說的永久代,用來存放類的資訊,常量,靜態變數,jit 即時編譯** 等。可以不實現gc,但一般也會。例如類解除安裝之類也會**

-xx:maxpermsize=256m 設定永久代最大可用空間。

字串常量池:jvm 1.7 之前是放在方法區內,1.7 時移出方法區,因此不再受 maxpermsize 引數的限制。

本地記憶體:其餘的本機記憶體,這部分記憶體不是jvm 規範規定的記憶體,但是j**a 執行時還是會用到這些記憶體,如多執行緒,字串常量等都會增加消耗,如果不足也會outofmemoryerror

jvm記憶體模型 JVM記憶體模型詳情解析

一 結構圖 note string常量池 存在 堆記憶體中 二 各部分詳情解析 1 堆1 老年代 物件年齡 經過一次 monitor gc 年齡加1 15 的會存到 老年代 2 年輕代 3 常量池 string常量 儲存在堆中 2 虛擬機器棧 1 區域性變數表 2 運算元棧 3 動態鏈結 4 方法出...

JVM記憶體劃分

從上圖可以看出,jvm記憶體區域可以簡單的劃分為方法區,堆區,虛擬機器棧,本地方法棧和程式計數器。上圖中,淺色的為執行緒共有的記憶體區域,深色的為執行緒私有的記憶體區域。可以看出,方法區和堆區是所有執行緒之間共享的記憶體區,而棧區和pc則是執行緒本身私有的,不能被其他執行緒所共享。我們簡單的說下各個...

jvm記憶體模型

主要分為棧,堆,方法區,程式計數器 1.程式計數器 2.棧 stack 虛擬機器棧 每個執行緒獨生成乙個棧,執行緒中每呼叫乙個方法生成乙個棧幀,棧幀依次壓棧 棧幀中存放了每個方法的基本資料變數,物件的引用,操作指令,出口資訊等 本地方法棧 存放的是native方法 其他語言寫的 其他和虛擬機器棧一樣...