java小白简洁总结垃圾回收器

1.GC的分类

GC可以按照4个部分来分类
1.按照线程数来分:
可以分为串行垃圾回收器和并行垃圾回收器
这两种GC都会涉及到STW。(STW:Stop The World 在垃圾回收的时候要暂停其他用户线程,直到垃圾回收完全结束);
2.按照工作模式来分:
可以分为并发式垃圾回收器和独占式垃圾回收器
并发式垃圾回收器与用户线程交替的工作,就可以减少STW的时间,减少用户的停顿时间
独占式垃圾回收器(STW)就是要暂停所有的线程,直到垃圾回收完全结束
3.按照垃圾回收器算法的不同 碎片处理的方式来分:
1.标记-压缩式垃圾回收器和复制算法垃圾回收器,会在一次GC之后对内存碎片进行压缩
再分配对象空间的时候就可以使用:指针碰撞
2.标记-清除式<—称为非压缩式的垃圾回收器 不会对垃圾进行压缩
再分配对象空间的时候就可以使用:空闲列表
4.按工作的内存区间来分
在堆内存中使用的新老年代分区的模式
所以按工作内存区间可以分为年轻代垃圾回收器和老年代垃圾回收器

2.评估GC的性能指标

主要分为以下4点:

  1. 吞吐量:运行时用户的代码时间占运行时间的比例
    (运行总时间:程序的运行时间+内存回收的时间 内存回收时间可以大致看成STW时间 所以STW时间越长 吞吐量越小
  2. 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间
  3. 收集频率:相对于应用程序的执行,收集操作发生的频率
  4. 内存占用:Java堆区所占的内存大小

3.七种常用的垃圾回收器

根据上述的分类规则

1.Serial回收器

Serial回收器式一种串行回收器 单CPU的GC
Serial回收器采用了复制算法,串行回收和STW的方式来执行内存回收
复制算法---->压缩式的垃圾回收器----->新对象内存分配:空闲列表

Serial的优点有以下两点:

  1. 简单而高效 (与其他单线程的收集器相比) 运行在Client模式下的虚拟机是个不错的选择
  2. 可用的内存一般不大 垃圾回收频率不高 使用串行回收一起是可以接受的

Serial不仅提供了年轻代的垃圾回收器 还有Serial Old GC
SerialOld是运行在Client模式下默认的老年代的垃圾回收器

2.ParNew回收器 并行回收器

称之为是Serial的多线程的版本
在年轻代中同样也是采用复制算法,同样有STW机制
ParNew是很多JVM运行在Server模式下新生代的默认垃圾收集器
在老年代在JDK9之前都可以使用Serial Old GC
之后就取消了 ParNew GC 和Serial Old GC的搭配 也取消了ParNew GC 和 CMS GC的搭配

在单个CPU的环境下 ParNew的效率要低于Serial

3.Parallel回收器:吞吐量优先

采用了复制算法,并行回收和STW机制

parallel与parNew的区别

  1. Parallel Scavenge收集器的目标则是达到一个可控的吞吐量,它被称为吞吐量优先的垃圾收集器
  2. 自适应调节策略也是Parallel Scavenge与ParNew的一个重要区别
  3. 高吞吐两可以高效的利用CPU,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务

Parallel Old收集器采用压缩-标记算法 但同样也是基于并行回收和STW机制

4.CMS回收器:低延迟 低的暂停时间 Concurrent 并发

CMS(Concurrent-Mark-Sweep)收集器 实现了让垃圾收集线程与用户线程同时工作
尽可能缩短垃圾收集时的用户线程的STW时间
目前大部分
java应用集中在互联网或者B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短。

4.G1回收器:区域化分代式 jdk底层默认的垃圾回收器

​ 为了适应不断扩大的内存和不断增加的处理器数量,进一步降低暂停时间,同时兼顾良好的吞吐量
​ 官方给G1设定的目标时再延迟可控的情况下获得尽可能高的吞吐量
​ Region区域 G1是一个并行的回收器,它把堆内存分割为很多不相关的区域(物理上不连续的),使用不同的Region来表示Eden,幸存者0区和幸存者1区;
​ G1 GC有计划的在避免在整个Java堆中进行整个区域的垃圾收集,G1跟踪各个Region里面的垃圾堆积的价值大小,在后台维护一个列表,每次根据允许的收集时间 优先回收价值最大的Region
所以G1 ----> Garbage First <-----垃圾优先

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值