JVM<一>内存管理[三]垃圾回收器

1. 垃圾回收器关注点

  1. 关注角度

image-20220428212812959

  1. 需要关注经典垃圾回收器

image-20220428215941360

image-20220428215958260

2. 经典垃圾回收器讲解

2.1 CMS收集器

image-20220428192705489

参数设置

  • -XX:+UseConcMarkSweepGC

image-20220428192633986

image-20220428215040808

2.2 G1收集器

image-20220428185658685

G1收集器的参数

  • -XX: +UseG1GC
  • 设置默认停顿时间,一般设置在200-300ms左右,如果小于这个量级,就很容易出现FullGc从而影响性能。

image-20220428185609946

设计细节

  1. 年轻代的GC

image-20220429095417561

  1. 老年代的GC

image-20220429095445843

  • 此处的重点是采用了原始快照的方式
  • 使用了写前屏障,进行记忆集和卡表的更新。
  • 筛选回收,也就是独占清理需要STW
  1. 混合回收

    image-20220429095459622

2.3 ZGC

2.4 shenadoah

重要的点

  • 并发整理,区别于G1的并行整理
  • 不进行分代收集
  • 连接矩阵,放弃了记忆集,不用维护,从而也没有伪共享。使用连接矩阵

3. 其他关注点

3.1 性能指标

  • 吞吐量: 用户线程的时间/用户线程的时间 + GC的时间
  • 延迟:就是垃圾回收停顿用户线程的时间
  • 内存占用情况。
  • 其他:回收频率等

其中延迟和吞吐量还有内存是矛盾三角。随着硬件的发展,吞吐量和内存可以解决,但是延迟却会随之升高。

3.2 参数设置

  • 产看默认的垃圾回收器

    • -XX:+PrintCommandLineFlags
    • jinof -flag UseParNewGC 2343
    • verbose:gc
  • 各种收集器的使用设置

    • -XX:+UseSerialGC
    • -XX:+UseParNewGC // -XX:ParalleGCThreads 限制线程数目
    • Parllel S和O是JDK8种默认的收集器
    • -XX: +UseG1GC
  • 不同收集器的参数设置,具体看各种收集器

  • 一般的配置

    • 老年代配置启动的阈值
    • 多线程配置线程的数目
    • 加上是否进行压缩,整理

3.3 日志分析

1. 关于日志的参数

image-20220428190336763

2. Minor的回收日志

image-20220428191023402

3. Full Gc的日志

image-20220428191535134

总结来说,可以得到下面的信息

  • 年轻代的回收情况
  • 老年代的回收情况
  • 元空间/永久代的回收情况
  • 堆总体的回收请款
  • 回收花费的时间信息

不同回收时间对比

  • user – GC运行时间

  • sys – 阻塞等待系统调用时间

  • real – 运行的真实时间

  • User + sys >= real
    image-20220517162207094

4. 垃圾回收器对比

4.1 G1于CMS的对比

  • 工作流程对比

image-20220428213226797

  • 性能对比
    • CMS适合4-6G内存,G1适合6G+内存
    • CMS的最好性能和G1差不多,但是平均性能不如,最坏性能远远低于G1
    • G1可以进行延迟预测,CMS不能
  • 算法对比
CMSG1
并发标记增量跟新原始快照
回收算法标记-清除标记复制 + 标记压缩
写屏障写后屏障写前屏障
  • 并发于并行
    • CMS只有在初始标记和重新标记阶段STW,所以延迟较小
    • G1在初始标记,重新标记,并行回收阶段都STW,延迟较小,但是仍旧有延迟。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值