(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秒,使用并发收集器