Parallel Scavenge 收集器

举报
程序员学长 发表于 2022/04/22 23:08:54 2022/04/22
【摘要】 Parallel Scavenge 收集器HotSpot 的年轻代中除了 ParNew 收集器是基于并行的回收以外,Parallel Scavenge 收集器同样也采用了复制算法、并行回收和“Stop The World”机制。和 ParNew 不同,Parallel Scavenge 收集器的目标是达到一个可控制的吞吐量,也被称为吞吐量优先的垃圾收集器。自适应调节策略也是 Paralle...

Parallel Scavenge 收集器

HotSpot 的年轻代中除了 ParNew 收集器是基于并行的回收以外,Parallel Scavenge 收集器同样也采用了复制算法、并行回收和“Stop The World”机制。

  • 和 ParNew 不同,Parallel Scavenge 收集器的目标是达到一个可控制的吞吐量,也被称为吞吐量优先的垃圾收集器。
  • 自适应调节策略也是 Parallel Scavenge 与 ParNew 的一个重要区别。

高吞吐量则可以高效率的利用 CPU 时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。因此,常见在服务器环境中使用。例如,那些执行批量处理、订单处理、工资支付、科学计算的应用程序。

Parallel Scavenge 收集器在 JDK1.6 时提供了用于执行老年代垃圾收集的 Parallel Old 收集器,用来代替老年代的 Serail Old 收集器。Parallel Old 收集器采用标记-压缩算法,但同样也是基于并行回收和“Stop The World”机制。

image-20220420161603695.png

在吞吐量优先的应用场景中,Parallel Scavenge 收集器和 Parallel Old 收集器的组合,在 Server 模式下的内存回收性能很不错。在 JDK8 中,默认就是此垃圾收集器。

参数配置相关

  • -XX: +UseParallelGC 手动指定年轻代使用 Parallel Scavenge 并行收集器执行垃圾回收任务。
  • -XX: +UseParalleloldGC 手动指定老年代使用 Parallel Old 并行收集器。

这两个参数分别适用于年轻代和老年代。默认 jdk8 是开启的。

这两个参数,默认开启一个,另一个也会被开启(互相激活)。

  • -XX:ParallelGCThreads 设置年轻代并行收集的线程数。一般的,最好与CPU数量相等,以免过多的线程数影响垃圾收集性能,在默认情况下,当 CPU 数量小于 8 个,ParallelGCThreads 的值等于 CPU的数量。当 CPU 的数量大于8个时,ParallelGCThreads 的值等于 3 + [5 * CPU的个数 / 8]。

  • -XX:MaxGCPauseMills 设置垃圾收集器最大的暂停时间(STW),单位是毫秒。为了尽可能把停顿时间控制在 MaxGCPauseMills 以内,收集器在工作时会调整堆大小或者其它一些参数。对于用户来说,停顿时间越短体验越好。但是在服务器端,我们注重高并发,整体的吞吐量,所以服务端适合 Parallel 垃圾收集器。

  • -XX:GCTimeRatio 垃圾收集时间占总时间的比例( 为 1/(N+1) )。用于衡量吞吐量的大小,取值范围是(0,100)。默认是 99 ,也就是垃圾回收时间不超过1。与 MaxGCPauseMills 参数有一定的矛盾性。暂停时间越长,GCTimeRatio 越容易超过设定的比例。

  • -XX:UseAdaptiveSizePolicy 设置 Parallel Scavenge 收集器具有自适应调节策略。这种模式下,年轻代的大小、Eden 和 Survivor 的比例、晋升老年代的对象等参数会被自动调节,以达到在堆大小、吞吐量和停顿时间的平衡点。

    在手动调优比较困难的场合,可以直接使用这种自适应的方式,仅指定虚拟机的最大堆、目标吞吐量和停顿时间,让虚拟机自己完成调优工作。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。