后面会结合实例来说明,先准备一个jar包,这里我拿的是一个启动 eureka 的 SpringBoot 项目。

那下面我们就分别配置不同的垃圾收集器,然后分析它们的日志内容。
PS:打印GC日志的JVM参数是:
-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCDateStamps-Xloggc:./gc.log -jar
1.Parallel Scavenge收集器(默认)
因为 Parallel Scavenge 是默认收集器,所以只用在启动时指定打印GC日志即可
java -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc.log -jar eureka-server.jar
[GC (Allocation Failure)
[PSYoungGen: 33280K[Young区回收前]->3123K[Young区回收后] (38400K[Young区总大小])]
33280K[整个堆回收前]->3139K[整个堆回收后](125952K[整个堆总大小]), 0.0158731 secs]
[Times: user=0.02 sys=0.00, real=0.02 secs]
2.CMS收集器
CMS收集器需要在启动时手动设置
java -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc-cms.log -jar eureka-server.jar
在桌面打gc-cms.log如下:

对于青年代 ParNew 每行的日志内容与 Parallel Scavenge 类似,因为两者都是并行收集器,这里就不说了。但是,在老年代就还可以看到CMS的垃圾回收的过程:
3.G1收集器
G1是一个同时可以处理青年代与老年代的收集器,若要使用G1收集器,也需要在启动项目时手动配置:-XX:+UseG1GC
java -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc-g1.log -jar eureka-server.jar

由于示例代码中并未出现FullGC,所以这里就不演示了。更多G1先关格式解析可参考:Understanding G1 GC Logs…
PS:GC 日志其实一般是用来 GC 调优的,关于 GC 调优可以参考我的这篇文章…
本文标题:【JVM】GC(四):GC日志格式解析
本文链接:https://blog.quwenai.cn/post/9871.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。













还没有评论,来说两句吧...