电脑上制作网站的软件/网络营销策略是什么
Parallel Scavenge 收集器是个新生代收集器。它也是使用复制算法的收集器,又是并行的多线程收集器、、、、看上去和ParNew 都一样,那它有什么特别之处呢?
Parallel Scavenge 收集器的特点是它关注的点和其他收集器不同,CMS 等收集器的关注点是尽可能的缩短垃圾收集器期间用户线程的停顿时间,而 Parallel Scavenge 收集器的目标则是达到一个可控的吞吐量(Throughput)。所谓吞吐量就是 CPU 运行用户线程的时间和 CPU 总时间的比值。即吞吐量 = 运行用户线程时间 / (用户线程时间 + 垃圾收集时间),虚拟机总共运行了 100 分钟,其中垃圾收集1分钟,那吞吐量就是 99%。
停顿时间越短越适合与用户交互的程序,良好的响应速度能提升用户体验,而高吞吐量可以高效的运用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的程序任务。
Parallel Scavenge 收集器提供了两个参数用于精准控制吞吐量,分别是控制最大垃圾收集停顿时间的 -XX:MaxGCPauseMillis
参数,以及直接设置吞吐量的大小的 -XX:GCTimeRatio
参数。-XX:MaxGCPauseMillis
的允许值是个大于 0 的毫秒数,收集器将尽可能的保证内存回收花费时间不超过设定值。但是并不是这个设置的小就一定能让系统的垃圾收集速度变快,GC 停顿时间的缩短是以牺牲吞吐量和新生代空间换来的:系统把新生代调小一些,收集 300M新生代,肯定比 500M更快吧。这也直接导致收集发生的更频繁一些,原来 10 秒一次,每次停顿 100 毫秒,现在变成 5 秒一次,每次停顿 70 毫秒。停顿时间确实在下降,吞吐量也降下来了。
GCTimeRatio 参数的值应当是一个大于 0 小于 100 的整数,是用户代码时间比垃圾收集时间的倍数。如果设置为 n,则允许的 gc 时间为 t = (1 / (1 + n))。比如:如果把此参数设为 19,那么允许的最大 GC 时间就占总时间的 5%(即 1/(1+19)),默认值为99,也就是最大允许 1% 的垃圾收集时间。
由于与吞吐量关系密切,Parallel Scavenge 收集器也经常被称为“吞吐量优先”收集器。除上述两个参数之外,Parallel Scavenge 收集器还有个参数 -XX:UseAdaptiveSizePolicy
值得关注,这是个开关参数,打开之后,就不需要手工指定新生代的大小(-Xmn),Eden 与 Survivor 区的比例(-XX:SurvivorRatio)、晋升老年代对象大小(-XX:PretenureSizeThreshold)等细节参数了。虚拟机会根据当前系统运行情况收集性能监控信息,动态调整这些参数以提供适合的停顿时间或者最大吞吐量,这些调节方式称为 GC 的自适应调节策略(GC Ergonomics)。如果开发中对于收集器运作原理不太了解,手工优化存在困难时,使用 Parallel Scavenge 收集器配合自适应策略,把内存管理的调优任务交给虚拟机去完成将是个不错的选择。只需要把基本参数设置好(如 -Xmx设置最大堆),然后使用 MaxGCPauseMillis 参数(更关注最大停顿时间)或 GCTimeRatio (更关注吞吐量)参数给虚拟机设立一个优化目标,那具体细节参数的调优工作就由虚拟机完成了。
自适应调节策略也是 Parallel Scavenge 和 ParNew 一个重要区别。