JVM 垃圾回收日志

理解GC日志

如何打开GC Log显示

运行的时候加上jvm 参数: -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails
这里的-verbose:gc 与 -XX:+PrintGCDetails 的区别参考:参考link

可以加上 -Xloggc:C:/temp/gc.log 将打印的日志打到文件中去

Java HotSpot(TM) 64-Bit Server VM (25.74-b02) for windows-amd64 JRE (1.8.0_74-b02), built on Jan 29 2016 17:42:36 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 8284752k(1505712k free), swap 16567644k(8244240k free)
CommandLine flags: -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=20971520 -XX:MaxNewSize=10485760 -XX:NewSize=10485760 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
0.278: [GC (System.gc()) [PSYoungGen: 5768K->664K(9216K)] 5768K->672K(19456K), 0.0480998 secs] [Times: user=0.08 sys=0.00, real=0.05 secs] 
0.326: [Full GC (System.gc()) [PSYoungGen: 664K->0K(9216K)] [ParOldGen: 8K->599K(10240K)] 672K->599K(19456K), [Metaspace: 2997K->2997K(1056768K)], 0.1251666 secs] [Times: user=0.14 sys=0.00, real=0.13 secs] 
Heap
 PSYoungGen      total 9216K, used 164K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 2% used [0x00000000ff600000,0x00000000ff629100,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 599K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 5% used [0x00000000fec00000,0x00000000fec95dd8,0x00000000ff600000)
 Metaspace       used 3020K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 333K, capacity 388K, committed 512K, reserved 1048576K

我这个是jdk 1.8 中jvm 打印出来的日志,

最前面的的数字代表的是时间:从虚拟机启动以来的秒数。

GC日志开头 的 GC 和 Full GC 说明了本次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的。如果有Full说明此次GC是发生了STW(stop the world) 如果是调用System.gc()方法触发的收集,那么将显示 Full GC(System)

可以看出 新生代使用的垃圾回收器是:Parallel Scavenge
根据 名称 区别 使用的何种垃圾回收器:

  • Serial 显示的是 DefNew
  • ParNew 显示的是 ParNew
  • Parallel Scavenge 显示的是 PSYoungGen

然后 老年代的垃圾回收器使用的是 ParOldGen 代表Parallel Old 收集器

因为我使用的jdk 1.8 没有永久代这一说了显示的是 Metaspace 区域

原文地址:https://www.cnblogs.com/joeCqupt/p/9611010.html