Parallel概述 HotSpot的年轻代中除了拥有ParNew收集器是基于并?回收的以外,Parallel Scavenge收集器同样也采?了复制 算法、并?回收和"Stop the World"机制。
那么Parallel 收集器的出现是否多此?举?
和ParNew收集器不同,Parallel Scavenge收集器的?标则是达到?个可控制的吞吐量,它也被称为吞吐量优先的 垃圾收集器。简单来说就是:
不管执?多少次,也不管每次执?多少时间,但是要在?定的时间范围? ,尽可能让线程执??户程序 ?吞吐量则可以?效率地利?CPU时间,尽快完成程序的运算任务,主要适合在后台运算?不需要太多交互的任 务。因此,常?在服务器环境中使?。例如,那些执?批量处理、订单处理、?资?付、科学计算的应?程序。
Parallel的第?个优势是?适应调节策略,也是Parallel Scavenge与ParNew?个重要区别,基本含义就是?户可以 设定垃圾回收的最?停顿时间。这?点在G1?得到充分发扬,性能和效果也更好。
Parallel收集器在JDK1.6时提供了?于执??年代垃圾收集的Parallel old收集器,?来代替?年代的serial old收集器。
Parallel old收集器采?了标记-压缩算法,但同样也是基于并?回收和"stop-the-World"机制。
在程序吞吐量优先的应?场景中,Parallel收集器和Parallel old收集器的组合,在server模式下的内存回收性能很 不错。在Java8中,默认是此垃圾收集器 => 【Parallel Scavenge / Parallel old】
代码:
public class ParallGC {
private static int size = 1024 * 256;
public static void main(String[] args) {
for (int i = 0; i < 33; i++) {
byte[] allo = new byte[size];
}
}
}
JVM参数:
-Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8
?志:
0.093: [GC (Allocation Failure) [PSYoungGen: 8103K->528K(9216K)] 8103K->536K(19456K),
0.0008041 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap
PSYoungGen total 9216K, used 2900K [0x00000007bf600000, 0x00000007c0000000,
0x00000007c0000000)
eden space 8192K, 28% used [0x00000007bf600000,0x00000007bf851260,0x00000007bfe00000)
from space 1024K, 51% used [0x00000007bfe00000,0x00000007bfe84010,0x00000007bff00000)
to space 1024K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007c0000000)
ParOldGen total 10240K, used 8K [0x00000007bec00000, 0x00000007bf600000,
0x00000007bf600000)
object space 10240K, 0% used
[0x00000007bec00000,0x00000007bec02000,0x00000007bf600000)
Metaspace used 3040K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 332K, capacity 388K, committed 512K, reserved 1048576K
常?参数配置
-XX:+UseParallelGC ?动指定年轻代使?Parallel并?收集器执?内存回收任务,默认jdk8是开启的。
-XX:+UseParalleloldGC ?动指定?年代使?并?回收收集器。默认jdk8是开启的。与-XX:+UseParallelGC互相激活,只要开启?个,另 外?个就?动开启。
-XX:ParallelGCThreads 设置年轻代并?收集器的线程数。?般地,最好与CPU数量相等,以避免过多的线程数影响垃圾收集性能。 在默认情况下,当CPU数量?于8个,ParallelGCThreads的值等于CPU数量。当CPU数量?于8个, ParallelGCThreads的值等于3 + [ 5 * CPU数量] / 8 ]。
-XX:MaxGCPauseMillis 设置垃圾收集器最?停顿时间(即STW的时间),单位是毫秒。 为了尽可能地把停顿时间控制在MaxGCPauseMills以内,收集器在?作时会调整Java堆??或者其他?些参数。 对于?户来讲,停顿时间越短体验越好。但是在服务器端,我们注重?并发,整体的吞吐量。所以服务器端适合 Parallel,进?控制。该参数使?需谨慎。
-XX:GCTimeRatio,指定垃圾收集时间占总时间的?例(=1 /(N + 1)),?于衡量吞吐量的??。取值范围 (0,100)。默认值99,也就是垃圾回收时间不超过1。与前?个-XX:MaxGCPauseMillis参数有?定?盾性。暂停 时间越?,Radio参数就容易超过设定的?例。
-XX:+UseAdaptiveSizePolicy 设置Parallel scavenge收集器是否开启?适应调节策略。在这种模式下,年轻代的? ?、Eden和Survivor的?例、晋升?年代的对象年龄等参数会被?动调整,已达到在堆??、吞吐量和停顿时间之 间的平衡点。
在?动调优?较困难的场合,可以直接使?这种?适应的?式,仅指定虚拟机的最?堆、?标的吞吐量 (GCTimeRatio)和停顿时间(MaxGCPauseMills),让虚拟机??完成调优?作。