JVM垃圾回收器详解

1. 评估GC的性能指标

吞吐量: 运行用户代码时间占总运行时间的比例
暂停时间: GC时,程序的工作线程被暂停的时间
内存占用: Java堆区所占内存的大小

2. 垃圾回收器关系概述

在这里插入图片描述

垃圾收集器与垃圾分代之间的关系

在这里插入图片描述

垃圾收集器之间的组合关系

jdk8-9取消红色线条,jdk14取消绿色线条。
在这里插入图片描述

3. 七款经典的垃圾回收器

Serial回收器:串行回收

Serial收集器采用复制算法、串行回收,STW机制。
Serial Old收集器采用串行回收和STW机制,使用标记-压缩算法。是在Client模式下默认的老年代垃圾回收器。在Server模式下,与新生代的Parallel Scavenge配合使用,并作为老年代CMS收集器的后备方案。
优点: 简单高效
一般在Java web应用程序中不会采用串行垃圾收集器。

ParNew回收器:并行回收

在这里插入图片描述

Parallel回收器:吞吐量优先

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CMS回收器:低延迟

是一款并发收集器,可以让垃圾收集线程和用户线程同时工作,尽可能减少垃圾收集和用户线程的停顿时间。使用标记-清除算法,也会STW。
初始标记: 所有线程由于STW出现停顿,主要任务是标记GC Roots能直接关联到的对象(一层)。完成之后结束STW。
并发标记: 从直接关联对象开始遍历整个对象图,不需STW,垃圾收集线程与用户线程并发运行。
重新标记: 修正并发标记期间因用户线程继续运行而导致标记变动的那部分标记。STW。
并发清除: 清理标记阶段已经死亡的对象,释放内存空间。垃圾收集线程与用户线程并发运行。无STW。

上面6种垃圾回收器如何选择?

在这里插入图片描述

G1回收器:区域化分代式,垃圾优先

是jdk9及之后的默认垃圾收集器。

特点

并行与并发兼具:
并行:回收期间有多个GC线程同时工作,此时用户线程STW。
并发:可以与用户线程交替执行。
分代收集: 仍然区分年轻代和老年代,但不要求连续。同时兼顾年轻代与老年代。
在这里插入图片描述
其中H为大对象,超过1.5个region大小时放到H区。
空间整合: 内存回收以region为单位,region之间是复制算法,整体来看为标记-压缩,两种方法都可以避免内存碎片。

4.七种经典垃圾回收器总结

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值