运行System.gc()的时候,我们默认是看不到GC的日志的,正确的姿势是点击右上角的,Add Configuration或者Edit Configuration,
在VM options中填写:-XX:+PrintGCDetails
就可以在日志面板看到GC的日志了,手动调用GC来试验一下:
下面简单说说GC日志怎么看;
[GC (System.gc()) [PSYoungGen: 4031K->888K(38400K)] 69567K->66432K(125952K), 0.0320206 secs] [Times: user=0.00 sys=0.00, real=0.04 secs] [Full GC (System.gc()) [PSYoungGen: 888K->0K(38400K)] [ParOldGen: 65544K->66374K(87552K)] 66432K->66374K(125952K), [Metaspace: 3487K->3487K(1056768K)], 0.0086235 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] Heap PSYoungGen total 38400K, used 333K [0x00000000d5d80000, 0x00000000d8800000, 0x0000000100000000) eden space 33280K, 1% used [0x00000000d5d80000,0x00000000d5dd34a8,0x00000000d7e00000) from space 5120K, 0% used [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000) to space 5120K, 0% used [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000) ParOldGen total 87552K, used 66374K [0x0000000081800000, 0x0000000086d80000, 0x00000000d5d80000) object space 87552K, 75% used [0x0000000081800000,0x00000000858d1b48,0x0000000086d80000) Metaspace used 3493K, capacity 4496K, committed 4864K, reserved 1056768K class space used 382K, capacity 388K, committed 512K, reserved 1048576K
GC和Full GC代表的是垃圾收集类型,[PSYoungGen: 4031K->888K(38400K)]指的是[GC前该内存区域已使用的容量->GC后该内存区域已使用的容量(该内存区域总容量)]
69567K->66432K(125952K)指的是GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)
0.0320206 secs是GC时间
[PSYoungGen和[ParOldGen是指GC发生的区域,分别代表使用Parallel Scavenge垃圾收集器的新生代和使用Parallel old垃圾收集器的老生代。为什么是这两个垃圾收集器组合呢?因为我的jvm开启的模式是Server,而Server模式的默认垃圾收集器组合便是这个,在命令行输入java -version就可以看到自己的jvm默认开启模式。还有一种是client模式,默认组合是Serial收集器和Serial Old收集器组合。
Heap以下的是堆的详细日志。