Parallel Scavenge收集器是一个新生代收集器,它也是使用复制算法的收集器,又是并行的多线程收集器……看上去和ParNew都一样,那它有什么特别之处呢?

Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间),虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。

停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验,而高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。

Parallel Scavenge收集器提供了两个参数用于精确控制吞吐量,分别是控制最大垃圾收集停顿时间的-XX:MaxGCPauseMillis参数以及直接设置吞吐量大小的-XX:GCTimeRatio参数。

MaxGCPauseMillis参数允许的值是一个大于0的毫秒数,收集器将尽可能地保证内存回收花费的时间不超过设定值。不过大家不要认为如果把这个参数的值设置得稍小一点就能使得系统的垃圾收集速度变得更快,GC停顿时间缩短是以牺牲吞吐量和新生代空间来换取的:系统把新生代调小一些,收集300MB新生代肯定比收集500MB快吧,这也直接导致垃圾收集发生得更频繁一些,原来10秒收集一次、每次停顿100毫秒,现在变成5秒收集一次、每次停顿70毫秒。停顿时间的确在下降,但吞吐量也降下来了。

GCTimeRatio参数的值应当是一个大于0且小于100的整数,也就是垃圾收集时间占总时间的比率,相当于是吞吐量的倒数。如果把此参数设置为19,那允许的最大GC时间就占总时间的5%(即1 /(1+19)),默认值为99,就是允许最大1%(即1 /(1+99))的垃圾收集时间。

由于与吞吐量关系密切,Parallel Scavenge收集器也经常称为“吞吐量优先”收集器。除上述两个参数之外,Parallel Scavenge收集器还有一个参数-XX:+UseAdaptiveSizePolicy值得关注。这是一个开关参数,当这个参数打开之后,就不需要手工指定新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象年龄(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种调节方式称为GC自适应的调节策略(GC Ergonomics)。如果读者对于收集器运作原来不太了解,手工优化存在困难的时候,使用Parallel Scavenge收集器配合自适应调节策略,把内存管理的调优任务交给虚拟机去完成将是一个不错的选择。只需要把基本的内存数据设置好(如-Xmx设置最大堆),然后使用MaxGCPauseMillis参数(更关注最大停顿时间)或GCTimeRatio(更关注吞吐量)参数给虚拟机设立一个优化目标,那具体细节参数的调节工作就由虚拟机完成了。自适应调节策略也是Parallel Scavenge收集器与ParNew收集器的一个重要区别。

parallel scavenge 与parnew 区别:相关推荐

  1. parallel scavenge 与parallel new 区别

    两者都是复制算法,都是并行处理,但是不同的是,parallel scavenge 可以设置最大gc停顿时间(-XX:MaxGCPauseMills)以及gc时间占比(-XX:GCTimeRatio) ...

  2. JVM七大垃圾回收器上篇Serial、ParNeW、Parallel Scavenge、 Serial Old、 Parallel Old、 CMS、 G1

    GC逻辑分类 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现. 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本. 从不同角度分析垃圾收 ...

  3. Jvm垃圾收集器总结之 Parallel Scavenge 收集器

    Parallel Scavenge 收集器是个新生代收集器.它也是使用复制算法的收集器,又是并行的多线程收集器....看上去和ParNew 都一样,那它有什么特别之处呢? Parallel Scave ...

  4. Parallel Scavenge收集器:吞吐量优先

    Parallel Scavenge收集器,是年轻代中除了ParNew以外的另一款垃圾收集器,同样采用了并行回收.复制算法和"Stop The World"机制. 那么它和ParNe ...

  5. Parallel Scavenge垃圾回收器

    Parallel与Parallel Old垃圾回收器(学习笔记) 简介 全称为Parallel Scavenge收集器. HotSpot中,除了ParNew收集器是基于并行回收以外,Parallel ...

  6. 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )

    文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...

  7. 【Java 虚拟机原理】垃圾收集器 ( Serial | ParNew | Parallel Scavenge | CMS | Serial Old - MSC | Parallel Old )

    文章目录 前言 一.HotSpot 虚拟机的垃圾收集器 二.年轻代垃圾收集器 1. 串行收集器 ( Serial ) 2. ParNew 收集器 3. Parallel Scavenge 收集器 二. ...

  8. java Parallel gc_JVM Parallel Scavenge GC日志详解

    Parallel Scavenge 日志格式 -XX:+PrintGCDetails [GC (Allocation Failure) [PSYoungGen: 127520K->20064K( ...

  9. 在linux上gc日志详解,JVM Parallel Scavenge GC日志详解

    Parallel Scavenge 日志格式 -XX:+PrintGCDetails [GC (Allocation Failure) [PSYoungGen: 127520K->20064K( ...

  10. ZGC、G1与Parallel Scavenge吞吐量及停顿时间对比

    前言 关于各GC间对比的官网描述 翻译: Parallel GC 只能作为一个整体来压缩和回收老年代的空间.G1 逐渐将这项工作分布到多个更短的集合中.这会以潜在的吞吐量为代价大大缩短暂停时间. G1 ...

最新文章

  1. Reactjs 踏坑指南3:一些例子(未完成)
  2. 26 JSX深度剖析与使用技巧
  3. 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这
  4. 【深圳】掌通宝科技有限公司技术总监(兼架构师),约吗
  5. 利用MRT进行Modis NDVI数据(MOD13Q1)投影变换格式转换操作图文教程
  6. ASP.NET MVC 3.0(一): MVC 3.0 的新特性 摘要
  7. (每日一题 day 003 - 二维前缀和+动态规划) 1314. 矩阵区域和
  8. ios首次加载web_iOS预加载Web页面方案
  9. 教你快速使用VSCode编写HTML文件
  10. python-pandas功能大全
  11. How To Solve It!怎样解题
  12. 跟着Nature Microbiology学作图:R语言ggplot2做散点图添加拟合曲线和p值
  13. 网络知识汇总(1)-朗文和牛津英语词典网址
  14. win10安装hypermesh无法启动_最最详细的win10原版系统安装教程(包含制作启动安装)...
  15. 不一样的蓝牙连接方式——C#程序实现蓝牙通信
  16. Chrome浏览器各种崩溃、卡死解决方法
  17. 解决gpu没有运行进程,但是显存一直占用的方式
  18. 小米、华为、智汀家庭云:让你实现不同设备之间的互联互通?
  19. 计算机类研究生双证,想要报考计算机专业来攻读双证在职研究生最终是不是可以获得双证...
  20. Sql链接数据库基本语法

热门文章

  1. 2016年计划,2015年总结
  2. html几个重要标签用法(div,p,span,ul,li,dl,dt,dd,a,img,h,strong,em)
  3. 推荐一个去广告的插件: Adblock Plus,非常好用
  4. React className的写法
  5. 【办公基本软件】万彩办公大师教程丨PDF压缩工具
  6. SATA 3.2协议 Error handing机制
  7. Vue过滤器filter和filters的使用详解
  8. android编译找不到系统so,Android找不到so库解决方法
  9. CentOS安装Nginx 以及日志管理
  10. 【微信小程序】wx.request请求后success回调的数据无法显示到页面上