java垃圾收集器

Serial收集器

  1. 垃圾手机是必须停止其他线程 Stop The World
  2. serial/serial old流程
    safepoint(新生代采用复制算法 暂停用户所有线程)——>safepoint(老年代采用标记整理算法 暂停用户所有线程)
  3. Client模式适用

ParNew收集器

  1. Serial收集器的多线程版本
  2. -XX:SurvivorRatio -XX:PretenureSizeThreshold -XX:HandlerPromotionFailure
  3. -XX:ParallelGCThreads

Parallel Scavenge收集器

  1. 吞吐量=运行用户代码时间/(运行用户代码时间+垃圾回收时间)
  2. -XX:MaxGCPauseMillis最大垃圾收集停顿时间 -XX:GCTimeRatio设置吞吐量大小
  3. -XX:+UseAdaptiveSizePolicy开关参数
    打开之后不需要指定新生代大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象大小(-XX:PretenureSizeThreadshold)等参数

Serial Old

  1. 单线程的标记整理算法
  2. CMS的后备预案,在并发收集发生Concurrent Mode Failure时使用

Parallel Old

  1. 多线程标记整理
  2. 配合Parallel Scavenge收集器使用

CMS收集器

  1. 以获取最短回收停顿时间为目标的收集器
  2. 初始标记(标记GC Roots能直接关联到的对象)——>并发标记(GC Roots Tracing)——>重新标记(并发标记期间发生标记变动的对象)——>并发清除
  3. 默认回收线程数 (CPU+3)/4
  4. 无法处理浮动垃圾,可能出现Concurrent Mode Failure。
  5. -XX:CMSIniailtingOccupancyFraction调整启动阈值

G1收集器

  1. 并发与并行
  2. 分代收集
  3. 空间整合
  4. 可预测的停顿
  5. 初始标记——>并发标记——>最终标记——>筛选回收

常用参数总结

  1. UseSerialGC:Client模式下的默认值,打开后使用Serial/Serial Old
  2. UseParNewGC:ParNew/Serial Old
  3. UseConxMarkSweepGC:ParNew/CMS+Serial Old
  4. UseParallelGC:Parallel Scavenge/Serial Old
  5. UseParallelOldGC:Parallel Scavenge/Parallel Old
  6. SurvivorRatio:新生代中Eden与survivor区域的比值,默认为8,即新生代有90%可用
  7. PretenureSizeThreadshold:直接晋升老年代对象大小
  8. MaxTenuringThreshold:晋升到老年代对象年龄
  9. UseAdaptiveSizePolicy开关参数:自动调整
  10. HandlerPromotionFailure:是否允许分配担保失败 一般会打开,避免Full GC过于频繁
  11. ParallelGCThreads:设置并行GC回收的线程数
  12. GCTimeRatio:吞吐量大小,默认值为99。只能在Parallel Scavenge生效
  13. MaxGCPauseMillis:GC最大停顿时间,只能在Parallel Scavenge生效
  14. CMSIniailtingOccupancyFraction:调整启动阈值,默认值为92%,只能在CMS生效
  15. UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾回收后是否要进行一次碎片整理
  16. CMSFullGCsBeforeCompacting:设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片化整理

你可能感兴趣的:(java垃圾收集器)