当前位置: 首页 > 工具软件 > Parallel STL > 使用案例 >

学习笔记——Parallel Scavenge和Parallel Old

饶曦之
2023-12-01

前言

本章节是以读书笔记的目的来创作的,随时补充和更新,待学习比较深入以后,会后续补充作者自己的理解和思考总结

Parallel Scavenge收集器

Parallel Scavenge收集器也是一款新生代收集器,基于标记-复制算法实现的收集器,也是能够并行收集的多线程收集器。其目标为达到一个可控制的吞吐量,所谓吞吐量,程序实际运行时间比上总时间,总时间为程序实际运行时间加上GC时间,所以,吞吐量越接近于一,说明实际效果越好。因为停顿时间越短就越合适需要与用户交互或需要保证服务响应质量的程序,良好的响应速度能提升用户体验。

Parallel Scavenge收集器的参数

其提供了两个用于精准控制吞吐量的参数。
-XX:MaxGCPauseMillis 控制最大垃圾收集停顿时间的参数。
-XX:GCTimeRatio 直接设置吞吐量大小的参数。
-XX:+useAdaptiveSizePolicy 开关参数

-XX:MaxGCPauseMillis参数

-XX:MaxGCPauseMillis参数允许的值是一个大于0的毫秒数,当设置该参数后,一次minorGC所花费的最大时间就是该参数值,但是不要认为,如果该值设置得越小,那么minorGC就效果更好,因为该参数的设置是以牺牲吞吐量和新生代空间为代价换取的,举个例子,比如我做一次minorGC要收集的垃圾是500M,所需时间50ms,当时此时设置了 -XX:MaxGCPauseMillis参数为30毫秒,那么这500M的垃圾,肯定是收集不完的,可能只收集了300M,我就不收集了,那么就会剩下200M的垃圾,那么新生代的可用空间就会在原有的基础上减去这200M的垃圾,造成更容易发生minorGC。也就是说,原本我可能每10秒进行一次minorGC,一次收集500M,每次收集产生50ms延迟,设置参数以后,我现在可能每7秒就会进行一次minorGC,一次收集300M,每次收集产生30毫秒的延迟。属于minorGC变得频繁,但是延迟变小了,相对吞吐量也变大了。

-XX:GCTimeRatio参数

-XX:GCTimeRatio参数允许的值应当是一个大于0小于100的整数。是设置垃圾收集时间占总时间的比率。默认值是99,也是最大值,等价于吞吐量乘以100。垃圾收集时间的比率为1/(1+该参数)。

-XX:+useAdaptiveSizePolicy

这是一个开关参数,当这个参数被激活,就不需要人工指定以下
-Xmn 新生代的大小
-XX:SurvivorRatio Eden区和SurvivorRatio区的比例
-XX:PretenureSizeThreshold 晋升老年代对象大小
等细节参数了,虚拟机会根据当前系统的运行情况运行情况收集性能监控信息,动态的调整这些参数以提供最合适的停顿时间或者最大吞吐量。这种调节方式称为自适应的调节策略。如果对于收集器的运作不太了解,使用Parallel Scavenge收集器配合自适应的调节策略是个不错的选择,只需要把基本内存数据设置好,然后使用 -XX:MaxGCPauseMillis参数和 -XX:GCTimeRatio参数给虚拟机设置一个优化目标,那具体细节参数的调节工作就由虚拟机去完成了。

Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,支持多线程并发收集,基于标记整理算法。持续更新中…

 类似资料: