关于jvm垃圾回收器

以下内容来自垃圾收集器,在这里我简短的概括了一下

1、Serial收集器

介绍

Serial是单线程的收集器,并且垃圾回收时会暂停其他所有线程,即Stop the World,直到垃圾回收结束。

简单高效、没有线程切换开销

采用的回收算法

  • 新生代:复制算法
  • 老年代:标记-整理

2、ParNew收集器

介绍

ParNew是Serial的多线程版本,采用多线程进行垃圾回收。

采用的回收算法

  • 新生代:复制算法
  • 老年代:标记-整理

3、Parallel Scavenge收集器(jdk1.8默认的收集器)

介绍

同样是多线程,更关注吞吐量,Parallel Scavenge提供了很多参数供用户找到最合适的停顿时间或者最大吞吐量,当然也可以配置自适应策略,将内存管理的优化交给虚拟机来完成。

采用的回收算法

  • 新生代:复制算法
  • 老年代:标记-整理

4、Serial Old收集器

介绍

Serials Old是Serial的老年代版本,因此也是单线程的。
两大用途:

  1. jdk1.5及以前版本中与Parallel Scavenge搭配使用。
  2. 作为CMS的后备方案。

采用的回收算法

  • 新生代:复制算法
  • 老年代:标记-整理

5、Parallel Old收集器

介绍

Parallel Scavenge的老年代版本。多线程,注重CPU和吞吐量的场景都可以考虑Parallel Scavenge和Parallel Old。

采用的回收算法

  • 新生代:复制算法
  • 老年代:标记-整理

6、CMS收集器

介绍

一个真正意义上的并发收集器,以获取最短回收停顿时间为目标的收集器。适合用于非常注重用户体验的应用

采用的回收算法

标记-清除算法。分为以下四个步骤:

  1. 初始标记:暂停所有其他线程,记录下直接与root对象相连的对象,速度快;
  2. 并发标记:同时开启用户线程和GC线程,使用一个闭包结构去记录可达对象。但是这个过程中并不能保证能记录所有的可达对象,因为用户线程也在执行,执行过程中很有可能更新引用,所以GC不能实时记录。这个算法里会跟踪记录这些发生引用变更的地方;
  3. 重新标记:这个步骤就是为了重新标记并发标记阶段因用户线程执行而导致标记变动的那部分对象的记录,停顿时间会比初始标记时间长一些,但远远快于并发标记阶段;
  4. 并发清除:开启用户线程,同时GC清除那些未标记的区域。

优缺点

  • 优点: 并发收集、低停顿
  • 缺点:
    1. 对CPU资源敏感;
    2. 无法处理浮动垃圾;
    3. 使用的是标记-清除算法,会产生大量的空间碎片。

7、G1收集器

介绍

面向服务器的垃圾收集器,主要针对配备多处理器和大容量内存的机器,以极高概率满足GC停顿时间要求的同时,还具备高吞吐量。

采用的回收算法

整理来看是标记-整理,局部来看是复制算法。
大致分为四个步骤:

  1. 初始标记
  2. 并发标记
  3. 最终标记
  4. 筛选回收

G1在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的区域。。这种方式保证了G1在有限的时间内有尽可能高的收集效率。

特点

  1. 并行与并发:G1充分利用多CPU的硬件优势,缩短Stop the World停顿时间,并且通过并发的方式让Java程序继续执行(部分其他收集器需要挺短Java程序去执行GC)。
  2. 分代收集:G1可以不需要其他收集器的配合而管理整个GC堆,且仍保留了分代的概念。
  3. 空间整合:整理来看是标记-整理,局部来看是复制算法。(区别于CMS的标记-清除
  4. 可预测的停顿:是G1相对于CMS的另一个大优势,G1在关注低停顿的同时,还能建立可预测停顿时间模型,让使用者明确指定在M毫秒的时间片内,GC的时间不超过N毫秒。

JDK9开始,G1是默认的垃圾回收器

8、ZGC收集器

介绍

ZGC可以将停顿时间缩小到几毫秒以内,并且时间不受堆内存大小的影响,也就是说,出现Stop the World的情况更少,但也牺牲了一定的吞吐量。ZGC最大支持16TB的堆内存。
Java15已可以正式使用,但默认的还是G1。

采用的回收算法

复制算法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值