常用的GC调用思路:
分析场景:
一般分析场景有:启动速度的快慢;偶尔出现响应慢于平均水平或者出现卡顿。
确定目标
内存的占用,低延时,吞吐量。
收集日志
通过参数配置收集GC日志,通过JDK工具查看GC状态
1、配置GC日志: java -Xmx1024m -Xloggc:gc1.log -jar xxx.jar
2、配置启动后,在文件夹下产生gc1.log。more 文件夹。可以看到:

从日志中,可以看到一些GC的日志信息,比如初始化堆大小和最大堆栈大小。
分析日志
使用工具辅助分析日志,查看GC次数和GC时间
1、我们借用GCviewer工具进行查看 GC情况 GCviewer下载地址: github.com/chewiebug/G…
2、看图说话:

从图中,我们可以看到GC的停顿总时间是27.9s。停顿的次数为9652次。 Full GC时间过1.19s 而次数只有45次。
那么我们接下来看下统计数据:

从图中,我们知道了总的停顿时间是29.1s, 次数是9千多次,平均数据都在图中看出。
我们再看下内存的情况:

实时分析

从实时的数据来看: gc的总时间13.789s-14.181s,期间运行了7次,平均有0.056s。而ygc的次数有:3340-3250 = 90, 时间:12.963-12.571=0.392s 那么平均YGC时间=0.004,我们现在来看下非默认配置情况:

垃圾收集器Parallel参数调优
因为配置JVM有800多项,所以一般调优以后会有记录手册,记录配置了哪些配置。
1、JDK默认的收集器:是UseParallelGC 2、是基于吞吐量优先的
- 打开自适应GC策略
首先查看是否开启:

- 设置用于垃圾回收的线程数
首先查看当前线程数配置:

配置GC线程数,然后查看GC的信息,不断优化配置。
java -Xmx1024m - -XX:ParallelGCThreads=2 jar performance-0.0.1-SNAPSHOT.jar
- GC回收器配置
java -XX:+PrintFlagsFinal -version|grep UseParallelGC
可以看到默认使用parallelGC
现在我们修改成:CMS gc的方式
java -Xmx1024m - -XX:+UseConcMarkSweepGC jar performance-0.0.1-SNAPSHOT.jar
然后我们观察GC的情况。
总结:
GC的调优是一个繁琐的过程。一般是通过代码进行优化程序。只有在特定的场景下,才会进行JVM的GC不断调优。