JVM-透彻掌握Parallel垃圾回收器的使用方法

发布时间:2024年01月08日

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),让虚拟机??完成调优?作。

文章来源:https://blog.csdn.net/zhenlong_qu/article/details/135357894
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。