日志的重要性,不须要过多强调了。经过日志,咱们能够发现程序可能有内存(泄露)问题。本文从案例出发,具体介绍这些日志信息,以期帮助你们更好地了解垃圾回收的运行状况。spa
仍是先上图,看看本文的主要内容:3d

咱们先来看个案例,代码以下:日志

启动参数设置:blog
XX:+PrintGCDetails内存
运行main方法,输出io

关于GC日志的参数class

参数案例

参数解释:垃圾回收
-XX:+PrintGCDetails 启用日志程序
-XX:-UseAdaptiveSizePolicy 禁用动态调整,使SurvivorRatio能够起做用方法
-XX:SurvivorRatio=8设置Eden:Survivior=8:1
-XX:NewSize=10M -XX:MaxNewSize=10M设置整个新生代的大小为10M
写了一个Spring Boot项目,很是简单的项目,里面写了一个controller

这段代码实际上是想后面演示OOM用的,都行吧,这里先用他来看看GC垃圾回收日志。
在IDEA中设置

输出结果

抓出一段来聊聊
GC (minor )日志

(Allocation Failure):代表本次引发GC的缘由是由于在年轻代中没有足够的空间可以存储新的数据了。
PSYoungGen:表示是GC类型
8525K:YoungGC前新生代内存占用
352K:YoungGC新生代内存占用
9216K:新生代总共大小
98695K:YoungGC前JVM内存占用
98486K:YoungGC后JVM内存使用
130048K:JVM堆总大小
0.0092873 secs:YoungGC耗时
user=0.00:YoungGC用户耗时
sys=0.00:YoungGC系统耗时
real=0.01:YoungGC实际耗时(这里竟然四舍五入了)
Full GC 日志

PSYoungGen: 8051K->7817K(9216K):新生代区GC先后和总大小
ParOldGen: 244969K->244969K(245760K):老年代GC先后和大小。
253020K->252786K(254976K):堆GC先后内存占用状况。
Metaspace: 29386K->29386K(1077248K):元空间GC先后和总大小
后面那几项和上面同样
GC垃圾回收日志就是这么简单么~蓝(nan)不蓝(nan)?