【JVM总结】垃圾收集器

目录

 

引言

1.Serial收集器

2.ParNew收集器

3.Parallel Scavenge收集器

4.Serial Old收集器

5.Parallel Old 收集器

6.CMS收集器

7.G1收集器


引言

如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现。

下图是HotSpot jvm1.6所有垃圾收集器:如果两个收集器之间存在连线,就说明他们可以搭配使用。

1.Serial收集器

特点:新生代的单线程收集器(单线程意味必须暂停其他所有的工作线程,sun将之称为“stop the world”)。

收集算法:复制算法

优点:简单高效,对于限定单个CPU环境来说,Serial收集器省了线程交互的开销。

2.ParNew收集器

特点:Serial收集器的多线程版本,多条线程进行垃圾收集。Server模式下的虚拟机首选新生代收集器,其中一个与性能无关但很重要原因,除了Serial收集器外,目前只有它能与CMS收集器配合工作。它默认开启的收集线程数与CPU的数量相同。

收集算法:复制算法

注意:

并行:指多条垃圾收集线程并行工作,但是此时用户线程仍然处于等待状态。

并发:指用户线程和垃圾收集线程同时执行,用户程序继续运行,而垃圾收集程序运行在另一个CPU上。

3.Parallel Scavenge收集器

特点:新生代收集器,并行的多线程收集器。

目标:达到一个可控制的吞吐量(吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间))。

算法:复制算法

参数:-XX:MaxGCPauseMillis参数(最大垃圾收集停顿时间)-XX:GCTimeRatio参数(设置吞吐量大小)

          -XX:+UserAdaptiveSizePolicy 这是开关参数,虚拟机会根据当前系统的运行情况动态调整这些参数提供最合适停顿时间或最大吞吐量

4.Serial Old收集器

特点:Serial收集器的老年代版本,它同样是一个单线程收集器,主要被用在Client模式下的虚拟机用。

算法:标记-整理算法

5.Parallel Old 收集器

特点:Parallel Scavenge收集器的老年代版本,使用多线程,JDK1.6中才开始提供。和Parallel Scavenge组合成吞吐量优先的组合

算法:标记-整理算法

 

6.CMS收集器

特点:获取最短回收停顿时间为目标,适用于重视服务响应速度的互联网站或B/S系统的服务器端。

HotSpot虚拟机中第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作。

算法:标记-清除算法

运作过程:

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

其中初始标记、重新标记仍然需要“Stop the world”。初始标记仅仅标记一下GC Roots能够关联到的对象,速度很快。并发标记阶段就是进行GC Roots Tracing的过程,而重新标记则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录。这个阶段的停顿时间一般比初始标记阶段稍长一些,但远比并发标记的时间短。

整个过程耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作。所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发的执行的。

CMS优点:并发收集、低停顿。

缺点:

  • CMS收集器对CPU资源非常敏感
  • CMS收集器无法处理浮动垃圾。由于CMS并发清理阶段用户线程还在运行着,伴随着程序运行自然会产生新的垃圾,这一部分垃圾出现在标记过程之后,CMS无法在本次收集中处理掉他们,这一部分垃圾就被成为“浮动垃圾”。
  • 产生大量空间碎片。因为CMS是一款基于“标记-清除”算法实现的收集器。

7.G1收集器

特点:G1可以实现在基本不牺牲吞吐量的前提下完成低停顿的内存回收,这是由于它能够极力避免全区域的垃圾收集。之前的垃圾收集范围都是整个新生地或老年代,而G1将整个Java堆(包括新生代、老年代)划分为多个大小固定的独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域(这就是Garbage First名称的由来)。区域划分及有优先级的区域回收,保证了G1收集器在有限的时间内可以获得最高的收集效率。

算法:标记-整理算法

优点:一:G1收集器是基于“标记-整理”算法实现的收集器,也就是说它不会产生空间碎片。二:他可以非常准确的控制停顿,既能让使用者明确指定在一个长度在M毫秒的时间片段内,消耗在垃圾收集的时间不得超过N毫秒。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值