GC-垃圾收集器

关于jvm里面GC的垃圾收集器的一些整理

新生代

  • Serial[串行GC]收集器
    • 特点:单线程收集;标记-复制算法
    • 场景:Client模式下默认新生代收集器;单核机器
    • 可以通过-XX:+UseSerialGC来强制指定
  • Parallel Scavenge[并行回收GC]收集器
    • 特点:目标在于达到可控吞吐量(吞吐量=用户代码运行时间/(用户代码运行时间+垃圾收集时间));标记-整理
    • 场景:高效利用CPU,后台运算且不需要太多交互
    • 可用-XX:+UseParallelGC来强制指定,用-XX:ParallelGCThreads=4来指定线程数
  • ParNew[并行GC]收集器
    • 特点:多线程并行收集;标记-复制算法;其他特点与Serial相似
    • 缺点:在单CPU场景效果不突出
    • 场景:用户交互;配合CMS垃圾收集器

老年代

  • CMS[并发GC]收集器
    特点:最短回收停顿时间;标记-清除

    • 步骤
      • 初始标记:标记GC Roots直接关联的对象,速度快
      • 并发标记:GC Roots Tracing过程,好市场,与用户进程并发工作
      • 重新标记:修正并发标记期间用户进程继续运行而产生变化的标记,耗时比初始标记长,但远小于并发标记
      • 并发清除:清除标记的对象
    • 缺点
      • 对CPU资源敏感
      • 无法回收浮动垃圾
      • 标记-清除算法,会产生内存碎片,可以通过参数开启碎片的合并整理
  • Serial Old收集器

    • 特点:Serial的老年代版本,单线程;标记-整理
    • 场景:1.5之前与Parallel Scavenge配合使用;作为CMS的后备预案
  • Parallel Old收集器

    • 特点:标记-整理;多线程
    • 场景:为了替代Serial Old与Parallel Scavenge配合使用

G1收集器

特点:将整个Java堆划分为多个大小相等的独立区域Region,跟踪各个Region里面的垃圾堆积的价值大小,在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region

  • 步骤

    • 初始标记:标记GC Roots直接关联的对象

    • 并发标记:对堆中对象进行可达性分析,找出存活对象,耗时长,与用户进程并发工作

    • 最终标记:修正并发标记期间用户进程继续运行而产生变化的标记

    • 筛选回收:对各个Region的回收价值排序,然后根据期望的GC停顿时间制定回收计划

垃圾收集器搭配关系

常见的几种收集器
在这里插入图片描述
组合关系
在这里插入图片描述
红色虚线在 Jdk8废弃(Serial与CMS的组合和ParNew与Serial Old的组合声明废弃),Jdk9时完全弃用
绿色虚线在 Jdk14时, 完全弃用了 CMS垃圾收集器
黄色虚线在 Jdk14时, 弃用了 Parallel Scavenge与 Serial Old的组合
蓝色直线是CMS回收失败时,备选收集器
黑色直线是正在使用

参考:
https://www.jianshu.com/p/92d07f7e88e9

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值