一、Parallel Scavenge收集器
Parallel Scavenge
收集器也是一款新生代收集器,它同样是基于标记
-复制算法实现的收集器,是 能够并行收集的多线程收集器。
Parallel Scavenge收集器的特点是它的关注点与其他收集器不同。Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。所谓吞吐量就是处理器用于运行用户代码的时间与处理器总消耗时间的比值,即:
举例说明:
如果虚拟机完成某个任务,用户代码加上垃圾收集总共耗费了
100
分钟,其中垃圾收集花掉
1
分
钟,那吞吐量就是
99%
。
Parallel Scavenge收集器也经常被称作“吞吐量优先收集器”。
jvm参数
Paraller Scavenge 提供了两个参数用于精确地控制吞吐量:
-XX:MaxGCPauseMillis参数,控制最大垃圾收集停顿时间。
-XX
:
MaxGCPauseMillis
参数允许的值是一个大于
0
的毫秒数,收集器将尽力保证内存回收花费的
时间不超过用户设定值。不过垃圾收集停顿时间缩短是以牺牲吞吐量和新生代空间为代价换取的。
-XX:GCTimeRatio参数,直接设置吞吐量大小。
-XX
:
GCTimeRatio
参数的值则应当是一个大于
0
小于
100
的整数,也就是垃圾收集时间占总时间的
比率,相当于吞吐量的倒数。默认值为
99
,即允许最大
1%
(即
1/(1+99)
)的垃圾收集时间。
二、Parallel Old 收集器
Parallel Old
是
Parallel Scavenge收集器的老年代版本,支持多线程并发收集,基于标记-整理算法实 现。
在Parallel Old出现之前 Parallel Scavenge收集器一因为不能和CMS收集器配合工作,只能和Serial Old配合工作,由于老年代Serial Old收集器在服务端应用性能上的“拖累”,使用Parallel Scavenge收集器也未必能在整体上获得吞吐量最大化的效果。同样,由于单线程的老年代收集中无法充分利用服务器多处理器的并行处理能力,在老年代内存空间很大而且硬件规格比较高级的运行环境中,这种组合的总吞吐量甚至不一定比ParNew加CMS的组合来得优秀。
直到
Parallel Old
收集器出现后,
“
吞吐量优先
”
收集器终于有了比较名副其实的搭配组合,在注重
吞吐量或者处理器资源较为稀缺的场合,都可以优先考虑
Parallel Scavenge
加
Parallel Old
收集器这个组合。