垃圾收集器

垃圾收集器

在这里插入图片描述

1、Serial

-XX:+PrintCommandLineFlags
单线程,会停止用户线程
-XX:+UseSerialGC
收集时会停止用户线程,单线程收集,适合单核CPU
在这里插入图片描述

2、ParNew

相当于serial的多线程版本,适合多核cpu
-XX:+UseParNewGC
-XX:+UseParllelGCThreads 限制线程数量,默认开启和cpu数据相同的线程数
在这里插入图片描述

3、Parllel Scavenge

吞吐量优先的回收器

Parllel 收集器达到吞吐量优先的目的

高吞吐量可以高效的利用cpu,适合后台运行不需要太多交互的任务(批处理,订单处理,工支付,科学计算)
Parallel 收集器和Parllel Old 收集器的组合 在Java8中默认的收集器

-XX:+UseParallelGC

-XX:+UseParallelOldGC
Parallel old 采用标记-整理算法
在这里插入图片描述

4、CMS

-XX:+UseConcMarkSweepGC
并发-标记收集器
追求系统的低停顿时间
标记-清除算法
新生代采用:serial 或者ParNew 收集器
在这里插入图片描述

  • 初始标记(会停止用户线程)
  • 并发标记(用户线程和GC线程一起)
  • 重新标记(stw)
  • 标记清除

由于最耗时间的并发标记和并发标记清除阶段都不需要暂停工作,所以整体的回收停顿时间较短

采用标记清除算法会产生碎片

在并发清除的时候如果采用整理算法,原来的用户线程使用的内存还怎么用?要保证用户线程继续执行的前提下它运行的资源不受影响
CMS 的优缺点

优点: 并发收集,低延迟

缺点: 会产生碎片 ,CPU资源消耗严重,CMS服务处理浮动垃圾

浮动垃圾:并发阶段 如果产生新的垃圾对象,CMS将无法对这些垃圾对象进行标记,最终会导致这些新产生的垃圾对象无法被及时回收

5、G1

-XX:+UseG1GC
Garbage-First 收集器
主要针对多核cpu和大容量内存的机器
jdk9 后默认的垃圾收集器

在这里插入图片描述

优势
  1. 不会产生碎片

    CMS采用标记-清除算法,会产生碎片
    G1将内存划分为一个个的region,内存的回收一region基本单位。Region之间采用复制算法
    整体上可以看做标记-整理算法
    这两种算法避免内存碎片,有利于长时间运行,分配大对象不会因为没有找到内存空间提前触发一次gc

  2. 可预测停顿时间 G1除了追求低停顿时间,还可以预测停顿时间模型

缺点

  • G1占得内存,运行的额为负载要比CMS要高

总结

想最小的使用内存和并行开销----serial GC
想最大应用吞吐量 ----- parallel GC
最小的中断或停顿时间 --------- CMS
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值