Excel不相邻列如何打印在一起-英雄云拓展知识分享
133
2023-11-07
【摘要】 本书摘自《深入理解 Java 虚拟机 JVM 高级特性与最佳实践(第3版)》一书中第3章,第5节,周志明著。
3.5.3 Parallel Scavenge 收集器
Parallel Scavenge 收集器也是一款新生代收集器,它同样是基于标记-复制算法实现的 收集器,也是能够并行收集的多线程收集器……Parallel Scavenge 的诸多特性从表面上看和 ParNew 非常相似,那它有什么特别之处呢?
Parallel Scavenge 收集器的特点是它的关注点与其他收集器不同, CMS 等收集器的关 注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而 Parallel Scavenge 收集器的目标则 是达到一个可控制的吞吐量 (Throughput) 。 所谓吞吐量就是处理器用于运行用户代码的时 间与处理器总消耗时间的比值,即:
如果虚拟机完成某个任务,用户代码加上垃圾收集总共耗费了100分钟,其中垃圾收集 花掉1分钟,那吞吐量就是99%。停顿时间越短就越适合需要与用户交互或需要保证服务响 应质量的程序,良好的响应速度能提升用户体验;而高吞吐量则可以最高效率地利用处理 器资源,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的分析任务。
Parallel Scavenge 收集器提供了两个参数用于精确控制吞吐量,分别是控制最大垃圾收集 停顿时间的-XX:MaxGCPauseMillis参数以及直接设置吞吐量大小的-XX:GCTimeRatio参数。
-XX:MaxGCPauseMillis 参数允许的值是一个大于0的毫秒数,收集器将尽力保证内存 回收花费的时间不超过用户设定值。不过大家不要异想天开地认为如果把这个参数的值设置 得更小一点就能使得系统的垃圾收集速度变得更快,垃圾收集停顿时间缩短是以牺牲吞吐 量和新生代空间为代价换取的:系统把新生代调得小一些,收集300MB新生代肯定比收集 500MB 快,但这也直接导致垃圾收集发生得更频繁,原来10秒收集一次、每次停顿100毫 秒,现在变成5秒收集一次、每次停顿70毫秒。停顿时间的确在下降,但吞吐量也降下来了。
-XX:GCTimeRatio参数的值则应当是一个大于0小于100的整数,也就是垃圾收集时间占 总时间的比率,相当于吞吐量的倒数。譬如把此参数设置为19,那允许的最大垃圾收集时间 就占总时间的5%(即1/(1+19)),默认值为99,即允许最大1%(即1/(1+99))的垃圾收集时间。
由于与吞吐量关系密切, Parallel Scavenge 收集器也经常被称作“吞吐量优先收集器”。 除上述两个参数之外,Parallel Scavenge收集器还有一个参数-XX:+UseAdaptiveSizePolicy 值得我们关注。这是一个开关参数,当这个参数被激活之后,就不需要人工指定新生代的 大小(-Xmn) 、Eden 与 Survivor 区的比例(-XX:SurvivorRatio) 、晋升老年代对象大小(-XX: PretenureSizeThreshold) 等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信 息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量。这种调节方式称为垃 圾收集的自适应的调节策略 (GC Ergonomics)0。如果读者对于收集器运作不太了解,手 工优化存在困难的话,使用Parallel Scavenge 收集器配合自适应调节策略,把内存管理的 调优任务交给虚拟机去完成也许是一个很不错的选择。只需要把基本的内存数据设置好 (如-Xmx设置最大堆),然后使用-XX:MaxGCPauseMillis 参数(更关注最大停顿时间) 或-XX:GCTimeRatio (更关注吞吐量)参数给虚拟机设立一个优化目标,那具体细节参数的 调节工作就由虚拟机完成了。自适应调节策略也是Parallel Scavenge 收集器区别于 ParNew 收集器的一个重要特性。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~