天天看點

JVM記憶體分代模型(用于分代垃圾回收算法)

JVM記憶體分代模型(用于分代垃圾回收算法)

1.部分垃圾回收器使用的模型

2.新生代+老年代+永久代(1.7)/中繼資料區(metaspace 1.8)

(1)永久代/中繼資料區----->Class

(2)永久代必須指定大小限制,中繼資料可以設定,也可以不設定,無上限(受限于機器的實體記憶體)

(3)字元串常量 在jdk1.7的時候,在永久代中,在jdk1.8後,到堆記憶體中

(4)methodArea邏輯概念---->永久代、中繼資料

3.新生代 = Eden(伊甸園區)+2個suvivor區(采用複制清除算法)YDC

(1)新生代垃圾回收後,大多數對象都會被回收,未被回收的由eden進入suvivor0。

(2)再次進行新生代記憶體回收,未被回收的由 eden+suvivor0 進入到 suvivor1中

(3)再次進行新生代記憶體回收,未被回收的由 eden+suvivor1 進入到 suvivor0中

(4)再次進行新生代記憶體回收,未被回收的由 eden+suvivor0 進入到 suvivor1中

(5)當新生代中存在一直未被回收(15個周期;cms中6個周期)的對象,将由新生代進入老年代

(6)當新生代中出現了裝不下的對象,那就進入老年代;

4.老年代

(1)當老年代也裝不下了,那就會觸發Full GC,對老年代中進行Full GC,是不建議出現的,也是jvm調優目标。Full GC:是将所有記憶體進行回收清除,并且還會出現 STW(Shop The World 業務線暫停,進行标記回收整理算法)

(2)MinorGC = YGC

(3)MajorGC = FGC

5.垃圾回收算法

JVM記憶體分代模型(用于分代垃圾回收算法)

(1)Serial:年輕代串行回收算法,短暫停止使用者線程,進行标記回收整理

(2)ParallelScavenge:年輕代 并行回收算法

(3)ParNew:年輕代 配合CMS的并行回收算法

(4)SerialOld:

(5)ParallelOld:

(6)CMS(Concurrent Mark sweep):老年代,并發回收算法,垃圾回收和使用者線程同時進行,減輕了STW現象(200ms)

(7)G1:(10ms)

(8)ZGC:(1ms)

繼續閱讀