Parallel与Parallel Old垃圾回收器(学习笔记)
简介
全称为Parallel Scavenge收集器。
HotSpot中,除了ParNew收集器是基于并行回收以外,Parallel Scavenge同样也采用了复制算法、并行回收和STW机制。
Parallel Scavenge的目标是达到一个可控制的吞吐量。
自适应调节策略也是Parallel Scavenge和ParNew的一个重要区别。
高吞吐量则可以高效利用CPU时间,尽快完成运算任务,主要适合在后台运算而不需要太多交互的场景。
- 批量处理
- 订单处理
- 工资支付
- 科学计算
Parallel Old收集器
Parallel收集器再JDK1.6时提供了用于执行老年代垃圾收集的Parallel Old收集器,用来代替Serial Old收集器。
Parallel Old收集器采用了标记-压缩算法,也同样基于并行回收和STW机制。
JDK8中,Parallel和Parallel Old时默认的垃圾回收器。
如何使用
开启Parallel收集器
+XX:UseParallelGC
指明新生代中使用Parallel收集器。
+XX:UseParallelOldGC
指明老年代中使用Parallel Old收集器。
以上两个参数会互相激活,即开启一个,另一个也默认开启。
设置GC线程
+XX:ParallelGCThreads
设置年轻代并行收集器的线程。
JVM在默认情况下:
- 当CPU数量不大于8时,默认值为CPU数量
- 当CPU数量大于8时,默认值为3+(5*CPU数量)/8【向下取整】
- 例如:当CPU数量为12时,默认线程数为3+5*12/8=10
设置暂停时间和吞吐量
-XX:MaxGCPauseMillis
设置垃圾回收器最大停顿时间,单位:毫秒。
- 为了尽可能把停顿时间控制在设定时间以内,收集器工作时会调整Java堆的大小或一些其它参数
- 对于用户来讲,停顿时间越短越好。但对于服务器而言,更注重高并发、吞吐量。
- 该参数需要谨慎设置
-XX:GCTimeRatio
设置垃圾收集时间占总时间的比例1/(N+1),用户衡量吞吐量大小。具体而言,设置的为参数N。
- N的取值范围:(0,100)。默认值为99,也就是垃圾回收时间不超过1%
这两个参数存在一定的矛盾性。-XX:MaxGCPauseMillis
越长,-XX:GCTimeRatio
越容易超过设定的比例。
自适应调节
-XX:+UseAdaptiveSizePolicy
设置Parallel收集器具有自适应策略。
- 这种模式下,年轻代、伊甸园、幸存者区的比例会自动调整,已达到在堆大小、吞吐量和停顿时间的平衡点。