首页   快速返回

各种垃圾收集器的特点及使用场景     所属分类 java
jvm hotspot 7种
serial ,ParNew,Parallel Scavenge,serial old,Parallel Old,CMS收集器,G1



连线的收集器可搭配使用

serial  新生代 单线程  Client模式下默认新生代收集器
ParNew  Serial多线程版本
Parallel Scavenge   新生代 可控制的吞吐量(Throughput) 适合在后台运算而不需要太多交互的任务
吞吐量=运行用户代码时间 /(运行用户代码时间+垃圾收集时间)
控制参数
-XX:MaxGCPauseMillis -XX:GCTimeRatio 
打开 -XX:+UseAdaptiveSizePolicy
不需要手工设置 新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象年龄(-XX:PretenureSizeThreshold)等参数

自适应调节策略是Parallel Scavenge与ParNew的一个重要区别!!!

Serial Old   serial的老年代版本 使用标记整理算法
作为CMS的后备预案,发生Concurrent Mode Failure时使用 !!!

Parallel Old  Parallel Scavenge的老年代版本 使用多线程和标记-整理算法

CMS(Concurrent Mark Sweep)  控制停顿时间为主要目标 适用于网站应用 使用标记-清除算法
主要分四个步骤 初始标记 并发标记 重新标记 并发清除
初始标记  重新标记 需要 STW Stop The World

CMS主要优点:并发收集,低停顿。
主要缺点 
 耗 cpu
 无法处理浮动垃圾,可能出现 Concurrent Mode Failure 导致另一次Full GC产生  CMSInitiatingOccupancyFraction参数调整
    
 基于 标记-清除 算法 内存碎片 
 -XX:+UseCMSCompactAtFullCollection (默认开启,停顿变长)
 -XX:CMSFullGCsBeforeCompaction  
 设置执行多少次不压缩的Full GC后,跟着来一次带压缩的(默认值为0,每次Full GC时都进行碎片整理)

G1 Garbage-First
优点  并行与并发 分代分区收集  空间整理 可预测的停顿
将堆划分成多个大小相等的独立区域(Region) 避免全堆扫描 
优先回收价值最大的Region  Garbage-First
使用Region划分内存空间以及有优先级的区域回收方式,保证了G1在有限的时间内的GC效率

GC根节点中加入Remembered Set 避免全堆扫描

除去维护Remembered Set的操作,G1运行步骤

初始标记
并发标记
最终标记
筛选回收

上一篇     下一篇
延迟队列原理及使用场景

JVM CMS 常用参数

JVM CMS 介绍

顶尖学霸是如何炼成的

程序员段子合集

理性客观看待区块链的应用前景