垃圾收集器

首先需要说明一点的是,本章虽然介绍了几种垃圾收集器,但并不是为了说明哪个收集器好,哪个收集器不好的,因为目前为止还没有哪个收集器可以完全取代其它的收集器的,如果有的话,HotSpot虚拟机也不会实现那么多不同的收集器了。

1 Serial收集器

Serial是最基本、发展历史最悠久的收集器,是一个单线程的收集器,不仅仅体现在它只会使用一个CPU或者一条线程去回收垃圾,而且当它在回收垃圾的时候,其它所有正在工作的线程必须暂停,直到它收集结束,也就是所谓的“Stop The World”。我们可以想想一下,当我们的程序每运行一段时间后,就会突然暂停5分钟进行垃圾回收,然后再运行,再暂停…你可以想象一下是什么样的场景,不过也有人说是可以理解的,比如说:当你妈妈正在打扫房间垃圾的时候,肯定不会允许你乱扔垃圾的。serial收集器依然是虚拟机运行在Client模式下默认新生代垃圾收集器,它的优点是:由于它是单线程的,所以只需要专心的做垃圾回收这件事就可以了,简单高效。
Serial收集器在新生代采用复制算法,老年代采用标记-整理算法。

2 ParNew收集器

ParNew收集器就是serial收集器的多线程版本,与Serial收集器对比,没有太多的创新点,它是许多运行在Service模式下的虚拟机中首选的新生代收集器,其中一个与性能无关却很重要的原因是,除了Serial收集器外,目前只有它可以和CMS收集器配合工作。在单线程的环境下,由于考虑到线程交互,ParNew收集器的不能百分之百的保证超越Serial收集器。

3 Parallel Scavenge收集器

Parallel Scavenge收集器是一个新生代收集器,也是采用复制算法,是一个并行的多线程收集器,它的特点是关注点与其它收集器不同,它主要是关注吞吐量(吞吐量=CPU运行用户代码时间/(CPU运行用户代码时间+垃圾回收时间)),有两个重要的参数-XX:MaxGCPauseMillis最大停顿时间和-XX:GCTimeRatio设置吞吐量大小。
第一个参数是一个大于0的毫秒值,收集器会尽可能的在规定时间内完成垃圾回收,不过是以牺牲吞吐量和新生代空间的,所以不是越小越好,第二个参数是一个大于0小于100的证书,相当于吞吐量的倒数。
还有一个参数:-XX:+UseAdaptiveSizePolicy,这是一个开关参数,当打开之后,就不需要手动指定其它的一些细节问题,就是所谓的GC自适应调节策略,这也是Parallel Scavenge收集器与ParNew收集器的一个重要区别。

4 Serial Old收集器

Serial Old是Serial收集器的老年代版本,也是一个单线程的收集器,使用“标记-整理”算法。

5 Paraller Old收集器

Paraller Old是Paraller Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。

6 CMS收集器

CMS垃圾收集器是一种以获取最短停顿时间为目标的收集器,采用“标记-清除”算法。运行过程大致分为4个过程:

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除

优点:并发收集、低停顿。
缺点:对CPU资源非常敏感;无法处理浮动垃圾;会产生大量的内存碎片。

7 G1收集器

G1收集器是一款面向服务端应用的垃圾收集器,具有以下特点:

  • 并行和并发
  • 分代收集
  • 空间整合
  • 可预测的停顿

G1收集器在工作时,是将java堆划分为多个大小相等的独立区域(Region),大致可分为以下几个步骤:

  • 初始标记
  • 并发标记
  • 最终标记
  • 筛选回收
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值