內存區域
PC指針
棧
堆
方法區
堆 分爲新生代,老年代,
方法區、永久代、Meta空間的說明:
https://www.cnblogs.com/chengpeng15/p/9850690.html
內存回收及內存分配
新生代 採用複製算法進行垃圾回收 Minor GC 速度快
老年代 採用標記整理(清理)進行垃圾回收 Major/Full GC 速度可能是 Minor GC 的10倍
對象內存分配
對象優先考慮在Eden 區域分配內存,Eden空間不足時促發一次Minor GC,爲新對象騰出空間,GC過程中對象可能被移到Survivor區,如果Survivor無法容納,則移到老年代。
-XX:PretenureSizeThreshold 參數,大於這個設置值的對象直接在老年代分配。
-XX:MaxTenuringThreshold參數,晉升老年代年齡閾值,每一次Minor GC,Survivor中的對象年齡加1.超過閾值後移到老年代。
除了超年齡晉升,JVM也有其它策略來讓對象晉升到老年代:某年齡的對象的總大小大於Survivor/2 的大小時,大於等於這個年齡的對象全部晉升。
FULL GC觸發的一個時機:
Minnor GC 前,JVM 檢測老年代是否有空間容納新生代的所有對象,如果沒有,那麼就可能觸發一次FULL GC,在老年代騰出空間來容納Minor GC 可能代來的 晉升行爲。是否FULL GC有若干的判斷條件。