- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
五、对于G1垃圾回收器优化建议
-
年轻代大小:
- 避免使用 -Xmn选项或 -XX:NewRatio 等其他相关选项显示设置年轻代大小
- 固定年轻代的大小会覆盖暂停时间目标
-
暂停时间目标不要太过严苛
- G1 GC 的吞吐量目标是 90% 的应用程序时间和 10%的垃圾回收时间
- 评估G1 GC的吞吐量时,暂停时间目标不要太严苛,目标太过严苛表示你愿意承受更多的垃圾回收开销,而这会直接影响到吞吐量
六、可视化GC日志分析工具
6.1 GC日志输出参数
前面通过 -XX:PrintGCDetails
可以对GC日志进行打印,我们就可以在控制台查看,这样虽然可以查看GC的信息,但是并不直观,可以借助于第三方的GC日志分析工具进行查看
在日志打印输出设计到的参数如下:
- -XX:+PrintGC:输出GC日志
- -XX:+PrintGCDetails:输出GC的详细日志
- -XX:+PrintGCTimeStamps:输出GC的时间戳(以基准的时间的形式)
- -XX:+PrintGCDateStamps:输出GC的时间戳(以日期的形式,如: 2020-05-04T21:25.234+0800)
- -XX:+PrintHeapAtGC:在进行GC的前后打印出堆的信息
- -Xloggc:…/logs/gc.log 日志文件的输出路径
测试参数:
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xmx256m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:E://test//gc.log
- 1
运行main 方法后,我们就可以在 E://test//gc.log
下发现一个 gc.log 的日志文件:
6.2 GC Easy 可视化工具
GC Easy是一款在线可视化工具,易用、功能强大,可以通过GC日志分析进行内存泄露检测、GC暂停原因分析、JVM配置建议优化等功能,而且是可以免费使用的
网站地址:http://gceasy.io
上传gc.log后,点击Analyze,就可以查看日志报告了
JVM的各个分代区域分配的内存及使用峰值的内存
关键性能指标: 吞吐量及GC暂停平均时间、最大时间、各个时间段的比例
- Throughput表示的是吞吐量
- Latency表示响应时间
- Avg Pause GC Time 平均GC时间
- Max Pause GC TIme 最大GC时间
第一部分是Heap after GC,GC后堆的内存图,堆是用来存储对象的
第二部分是Heap before GC,这是GC前堆的使用率,可以看出随着程序的运行,堆使用率越来越高,堆被对象占用的内存越来越大。
第三部分是GC Duration Time,就是GC持续时间。从图中可以看到,发生Full GC的时间持续的比较短,而Young GC持续的时间比较长。图中横坐标表示GC发生的时间段,纵坐标表示的是GC持续时间。
表示的是GC回收掉的垃圾对象的内存大小。
GC Statistics
**Reclaimed Bytes(gb):**表示的是堆内存中Minor GC和Full GC回收垃圾对象的内存。
GC cumulative Time(ms):总计GC时间,包括Minor GC和Full GC,时间单位为ms。
GC Average Time(ms):GC平均时间,包括了Minor GC和Full GC。
总GC统计
MinorGC的统计
FullGC的统计
GC暂停程序的统计
七、结束语
到这里G1垃圾回收器就讲完了,感兴趣的小伙伴记得点赞关注,大家加油!