【JVM】垃圾收集器

垃圾收集器

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

Serial收集器

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

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

优点

  1. 简单而高效
  2. 对于现场定单个CPU环境来讲,Serial收集器因为没有线程开销,能够专心作垃圾收集天然能够得到最高的单线程收集效率

ParNew收集器

是多线程的Serial收集器并发

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

优点

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

PS:两个词 并行 并发blog

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

Parrallel New

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

Serial Old

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

Parallel Old

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

CMS收集器

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

  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
相关文章
相关标签/搜索