jvm虛擬機在運行時需要用到的記憶體區域.廣泛一點就是堆和棧,其實不然,堆和棧只是相對比較籠統的說法,真正區分有以下幾個
#先上圖一:
總的就是
# java的記憶體模型
記憶體模型又分堆記憶體(heap)和方法區(有時也稱為non-heap)和堆疊
堆又分新生代(Young)和老年代(old/Tenured)
新生代又分預設比例為8: 1:1的eden空間、from survivor空間、to survivor空間
當進行垃圾回收時,eden、survivor from 存活得對象會複製到servivor to空間
# 互換.(當from區的物件夠老時,即標記的次數達到老年級別,便到老年代去)
#-XMS:堆疊的最小空間
-XMX:堆疊的最大空間
-PermSize:方法區的最小空間
-MaxPermSize:方法區的最大空間
-Xss:每個執行緒的堆疊空間
- newSize:新生代最小空間
-maxNewSize:新生代最大空間
老年代記憶體可以透過設定堆的大寫和新生代的大小來控制
老年代記憶體=堆疊記憶體-新生代記憶體
#程式計數器
1)時所呼叫地方方法(於#native)時為空白字節碼所執行的行數.執行緒所執行的字節碼的行號指示器,字節碼解釋器就是在工作時透過改變計數器的行號來取得要執行的字節碼指令.呼叫本地方法(native)時計數器為空
虛擬機堆疊
##java
java
java#java)方面建立執行方法的記憶體模型使用的每個執行方法
java
java#java#)建立一個執行方法的記憶體模型。棧幀,用於存放局部變數、操作數棧、動態連結、方法出口等資訊局部變數表:基本資料型別、物件參考、long和double型別佔兩個局部變數空間
每呼叫一個方法,都會對參數進行壓縮堆疊
本地方法堆疊
##.呼叫native方法時 堆:
堆疊記憶體 ## 而陣列都儲存在這裡
堆又分新生代、老年代
在分代收集演算法中,新生代又分eden空間、from survitor空間和to survitor空間).它們之間記憶體比例為8:1:1方法區 #中之後使用中對資料問
、靜態變數、即時編譯後的程式碼
方法區下方又有執行時間常數池:存放編譯期產生的字面量和符號引用
參考部落格文章
#這裡考考大家:
文中提到的類別資訊是什麼?
編譯期產生的字面量和符號引用又是啥?
以上是jvm java記憶體區域的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!