【JVM】垃圾收集器

本文介绍了Java中的垃圾收集器,包括Serial、ParNew、ParallelScavenge、CMS、SerialOld、ParallelOld及G1收集器的特点与应用场景。详细解释了各种收集器的工作原理,并对比了它们之间的优缺点。

垃圾收集器

收集算法未内存回收的方法论,则垃圾回收则为内存回收的具体实现。主流的垃圾收集器为 Serial,ParNew,Parrallel Scavenge, CMS,Serial OLd, Parrel Old, G1.

508290-20170320222021533-406005303.png

Serial收集器

  1. GC线程 新生代采取复制算法,暂停所有用户线程
  2. GC线程 老年代采取标记整理算法,暂停所有用户线程

虚拟机运行在client模式下默认的新生代收集器

优势
  1. 简单而高效
  2. 对于现场定单个CPU环境来说,Serial收集器由于没有线程开销,可以专心做垃圾收集自然可以获得最高的单线程收集效率

ParNew收集器

是多线程的Serial收集器

  1. 新生代采用复制算法,暂停所有用户线程
  2. 老年代采取标记整理算法, 暂停所有用户线程

优势

运行在Server模式下的首选的新生代收集器

PS:两个词 并行 并发

  1. 并行: 多条垃圾回收线程并行工作,但用户线程仍处于 等待状态
  2. 并发: 用户线程与垃圾回收线程同时执行,但不一定是并行的,可能会使用户线程在运行,但垃圾收集程序运行于另一个CPU上

Parrallel New

不同于其他垃圾收集器,ParrallelNew的目标达到一个可控制的吞吐量(运行用户代码时间/(运行用户代码时间+GC消耗时间)),停顿时间越短就越适合需要与用户交互的程序,而搞吞吐量则可以高效率的利用CPU时间,适合在后台运算二不需要太多交互的任务。

Serial Old

Serial收集器的老年代版本,单线程标记整理算法,在client模式下的虚拟机使用。

Parallel Old

ParrellScavenge的老年代版本,使用多线程和标记整理算法。

CMS收集器

以获取最短回收停顿时间为目标的收集器。

  1. 初始标记 STW
  2. 并发标记 和用户线程一起
  3. 重新标记 STW
  4. 并发清除 和用户线程一起

缺点

  1. 对CPU资源敏感
  2. 无法处理浮动垃圾
  3. 基于标记清除算法,有大量的碎片

G1

G1之前的 收集器 收集范围为整个新生代或者老年代,G1则是 将整个JAVA堆划分为多个大小相等的区域,虽然还保留新生代和老年代的概念,但是新生代和老年代不再是物理隔离,而是一部分region的集合。可预测停顿是 建立在其有计划的进行全区域的垃圾收集,G1跟踪各个区域内的垃圾堆积的价值大小,在后台维护一个有限列表,每次根据允许的手机时间,手机回收价值最大的区域。

  1. 并行和并发
  2. 分代收集
  3. 空间整合 G1从整体来看是基于 标记 整理,从局部看 是 基于复制算法的。
  4. 可预测的停顿

ways

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

转载于:https://www.cnblogs.com/bendev/p/6591978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值