JVM - GC垃圾回收

注:可达性分析法(判断对象是否存活):当一个对象到GC Roots没有任何引用链相连时。
GC Roots对象:虚拟机栈中对象引用;本地方法栈中对象引用;方法区中静态变量引用;方法区中常量的引用;

1,Minor GC(Young GC)

1)Minro GC触发条件与GC算法
当Eden空间不足时,会触发Minor GC。
使用Copying复制算法,当存活对象少时,复制算法效率很高。

5148056-98a0e25f9a180ecd.png
image.png

2)查看minor gc过程 jstat -gc 60 1000
5148056-6726136d9a7b539a.png
image.png

3)jstat结果说明
S0C、S1C、S0U、S1U:s0和s1的容量和使用量
EC、EU:年轻代容量和使用量
OC、OU:年老代的容量和使用量
MC、MU:元空间的容量和使用量
CCSC、CCSU:压缩空间的容量和使用量
YGC、YGCT:年轻代gc次数和gc耗时
FGC、FGCT:full gc次数和耗时
GCT:gc总耗时

2,Major GC(Full GC)

1)新生代对象晋升到年老代的时机
Eden满:此时使用S0作为from进行minor gc时,S1无法容纳ygc后的对象,则通过分配担保机制提前进入年老代。
-XX:PretenureSizeThreshold:对象大小超过设置的值,则直接分配在old区。默认为0,全部在eden分配。对ParNew和Serial收集器生效。
-XX:MaxTenuringThreshold:对象age计数器达到阈值时,晋升到年老代。
动态年龄判定:相同年龄(age)对象的sum(size)超过S区的一半,大于age的对象直接进入年老代。
2)触发Full GC的条件
System.gc():建议JVM进行full gc,通常使用-XX:+DisableExplicitGC来禁用。
老年带空间不足:新生代对象转入过快、创建大对象、大数组时。
永久带空间不足:未使用cms收集器时,会执行full gc。
3)年老代GC算法
标记-清除:标记出待回收对象 -> 统一回收被标记对象 -> 会产生碎片。如CMS垃圾回收器。
标记-整理:标记出待回收对象 ->存活对象向一端移动 -> 清除边界以外的内存 -> 耗时,无碎片。如parallel old 垃圾回收器。G1垃圾回收器。

2,CMS GC

1)CMS Concurrent Mark Sweep(多线程并发标记-清理)CMS号称是停顿时间最短的GC,-XX:+UseConcMarkSweepGC启用。它使用标记-清除算法,会产生碎片,但是速度快。
2)CMS步骤
初始标记:STW单线程执行,标记gc roots可达的对象。
并发标记:与用户线程一起执行,遍历InitialMarking标记存活对象,递归标记。
重新标记:STW并发重新标记。
并发清理:与用户线程一起执行,清理标记的垃圾对象。
并发重置:初始化CMS结构和数据。
3)CMS相关参数
-XX:CMSInitiatingOccupancyFraction:默认68%,当old使用了达到68%时触发cms gc。(可以调整为80%)
-XX:ParallelCMSThreads:设置CMS线程数量。
-XX:+UseCMSCompactAtFullCollection:CMS收集完成时,进行一步内存整理。

3,G1收集器

1)基于标记-压缩算法,不会产生空间碎片。可以指定停顿时长为M时,垃圾回收时间不超过N。
区域化、分代式垃圾回收器,堆被划分成若干个(不超过2048)大小相同的区域。
G1将一组或多组区域,增量、并行的方式复制到不同的区域实现压缩,减少堆碎片。

5148056-b74e49f64f8a6357.png
image.png

2)G1回收过程
5148056-e4ed0d4c77452c45.png
image.png

5148056-10c706205eea36a1.png
image.png

5148056-e7cc1a99ebe5ebef.png
image.png

3)G1相关参数
-XX:+UseG1GC: 告诉JVM使用G1回收器。
-XX:MaxGCPauseMillis: GC目标最大停顿时间。
-XX:G1HeapRegionSize: [1, 32M] 设置region大小。
4)G1优势
5148056-57cc997284fdd9bb.png
image.png

转载于:https://www.jianshu.com/p/b72e4f9b2cea

猜你喜欢

转载自blog.csdn.net/weixin_33895657/article/details/91202719