JVM常见垃圾收集器

117 阅读1分钟

(1) 串行收集器 Serial:Serial、Serial Old

  • -XX:+UseSerialGC -XX:+UseSerialOldGC

(2) 并行收集器 Parallel:Parallel Scavenge、Parallel Old,吞吐量

吞吐量优先

  • -XX:+UseParallelGC -XX:+UseParallelOldGC
  • Server模式下的默认收集器

(3) 并行收集器 Concurrent: CMS、G1,停顿时间

(4) 并行 (Parallel)

  • 指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态,适合科学计算、后台处理等弱交互场景

(5) 并发 (Concurrent)

  • 指用户线程与垃圾收集线程同时执行 (但不一定是并行的,可能会交替执行),垃圾收集线程在执行的时候不会停顿用户程序的执行,适合对响应时间有要求的场景,比如 Web

(6) 停顿时间

  • 垃圾收集器做垃圾回收中断应用执行的时间 -XX:MaxGCPauseMills

(7) 吞吐量

  • 花在垃圾收集的时间和花在应用时间的占比 -XX:GCTimeRatio=, 垃圾收集时间占:1/1+n

(8) 并发收集器

响应时间优先

  • CMS:XX:+UseConcMarkSweepGC -XX:+UseParNewGC
  • G1: -XX:+UseG1GC

(9) 如何选择垃圾收集器

  • 优先调整堆的大小让服务器自己来选择
  • 如果内存小于100M,使用串行收集器
  • 如果是单核,并且没有停顿时间的要求,串行或者JVM自己选
  • 如果允许停顿时间超过1秒,选择并行或者JVM自己选
  • 如果响应时间最重要,并且不能超过1秒,使用并发收集器

参考:rumenz.com/rumenbiji/j…