垃圾收集器parNew&CMS与底层三色标记法

垃圾收集算法

  1. 分代收集理论 针对新生代和老年代中存活对象数量不同,新生代中朝生夕死采用复制算法,老年代存活对象较多,采用标记清除和标记整理算法
  2. 复制算法 将内存分类大小相等的两块,每次只使用其中一块,当一块内存使用完时,将存活的对象复制到另一块,清理掉这一块
  3. 标记清除算法存活的对象进行标记,没有存活的对象进行清理,缺点:效率问题以及碎片化
  4. 标记整理算法 将存活的对象进行标记,向一端移动,统一回收另一端内存

垃圾收集器

垃圾收集器parNew&CMS与底层三色标记法_第1张图片
收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现
并没有一种垃圾收集器能解决所有问题,只能根据项目实际需要,选择适合的垃圾收集器。

  1. Serial收集器 (-XX:+UseSerialGC -XX:+UseSerialOldGC)

串行收集器,单线程,会STW。新生代采用复制算法,老年代采用标记整理算法
特点:简单而高效(与其他单线程收集器相比)
Serial Old收集器是Serial收集器的老年代版本

  1. Parallel Scavenge收集器(-XX:+ParallelGC -XX:+UseParallelOldGC)

并行收集器,其实就是Serial收集器的多线程版本,Parallel Scavenge 关注点是吞吐量,CMS等垃圾收集器的关注点更多的是用户的体验,卡顿的时间。
新生代采用复制算法,老年代采用标记整理算法

  1. ParNew收集器(-XX:+UseParNewGC)

    ParNew收集器与Parallel 收集器类似,主要区别在于ParNew 可与CMS收集器配合使用
    新生代采用复制算法,老年代采用标记整理算法

  2. CMS收集器(-XX:+UseConcMarkSweepGC(old))

CMS收集器是一种以获取最短回收卡顿时间为目标的收集器,它非常符合在用户体验的应用上使用,它是HotSpot虚拟机第一款真正意义上的并发收集器,它第一次实现了让垃圾收集器和用户线程(基本上)同时工作。 采用标记清除算法实现

分为4个步骤: 初始标记
并发标记
重新标记
并发重置
优点:并发收集,低卡顿
缺点:对cpu资源敏感 无法处理浮动垃圾
底层采用标记清除算法,碎片化,当然可以通过参数配置,进行整理
在这里插入图片描述
垃圾收集器parNew&CMS与底层三色标记法_第2张图片

垃圾收集器底层算法实现

  三色标记              黑色     灰色     白色

你可能感兴趣的:(JVM性能调优,jvm,算法,java)