Serial收集器
- 垃圾手机是必须停止其他线程 Stop The World
- serial/serial old流程
safepoint(新生代采用复制算法 暂停用户所有线程)——>safepoint(老年代采用标记整理算法 暂停用户所有线程) - Client模式适用
ParNew收集器
- Serial收集器的多线程版本
- -XX:SurvivorRatio -XX:PretenureSizeThreshold -XX:HandlerPromotionFailure
- -XX:ParallelGCThreads
Parallel Scavenge收集器
- 吞吐量=运行用户代码时间/(运行用户代码时间+垃圾回收时间)
- -XX:MaxGCPauseMillis最大垃圾收集停顿时间 -XX:GCTimeRatio设置吞吐量大小
- -XX:+UseAdaptiveSizePolicy开关参数
打开之后不需要指定新生代大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象大小(-XX:PretenureSizeThreadshold)等参数
Serial Old
- 单线程的标记整理算法
- CMS的后备预案,在并发收集发生Concurrent Mode Failure时使用
Parallel Old
- 多线程标记整理
- 配合Parallel Scavenge收集器使用
CMS收集器
- 以获取最短回收停顿时间为目标的收集器
- 初始标记(标记GC Roots能直接关联到的对象)——>并发标记(GC Roots Tracing)——>重新标记(并发标记期间发生标记变动的对象)——>并发清除
- 默认回收线程数 (CPU+3)/4
- 无法处理浮动垃圾,可能出现Concurrent Mode Failure。
- -XX:CMSIniailtingOccupancyFraction调整启动阈值
G1收集器
- 并发与并行
- 分代收集
- 空间整合
- 可预测的停顿
- 初始标记——>并发标记——>最终标记——>筛选回收
常用参数总结
- UseSerialGC:Client模式下的默认值,打开后使用Serial/Serial Old
- UseParNewGC:ParNew/Serial Old
- UseConxMarkSweepGC:ParNew/CMS+Serial Old
- UseParallelGC:Parallel Scavenge/Serial Old
- UseParallelOldGC:Parallel Scavenge/Parallel Old
- SurvivorRatio:新生代中Eden与survivor区域的比值,默认为8,即新生代有90%可用
- PretenureSizeThreadshold:直接晋升老年代对象大小
- MaxTenuringThreshold:晋升到老年代对象年龄
- UseAdaptiveSizePolicy开关参数:自动调整
- HandlerPromotionFailure:是否允许分配担保失败 一般会打开,避免Full GC过于频繁
- ParallelGCThreads:设置并行GC回收的线程数
- GCTimeRatio:吞吐量大小,默认值为99。只能在Parallel Scavenge生效
- MaxGCPauseMillis:GC最大停顿时间,只能在Parallel Scavenge生效
- CMSIniailtingOccupancyFraction:调整启动阈值,默认值为92%,只能在CMS生效
- UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾回收后是否要进行一次碎片整理
- CMSFullGCsBeforeCompacting:设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片化整理