以下是一段GC日志

  1. Java HotSpot(TM) 64-Bit Server VM (25.192-b12) for windows-amd64 JRE (1.8.0_192-b12), built on Oct 6 2018 17:12:23 by "java_re" with MS VC++ 10.0 (VS2010)
  2. Memory: 4k page, physical 33409488k(24593168k free), swap 38390224k(24429424k free)
  3. CommandLine flags: -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:MaxNewSize=5242880 -XX:NewSize=5242880 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC
  4. 0.244: [GC (Allocation Failure) 0.245: [ParNew: 3170K->512K(4608K), 0.0015722 secs] 3170K->1652K(9728K), 0.0028240 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
  5. Heap
  6. par new generation total 4608K, used 3704K [0x00000000ff600000, 0x00000000ffb00000, 0x00000000ffb00000)
  7. eden space 4096K, 77% used [0x00000000ff600000, 0x00000000ff91e050, 0x00000000ffa00000)
  8. from space 512K, 100% used [0x00000000ffa80000, 0x00000000ffb00000, 0x00000000ffb00000)
  9. to space 512K, 0% used [0x00000000ffa00000, 0x00000000ffa00000, 0x00000000ffa80000)
  10. tenured generation total 5120K, used 1140K [0x00000000ffb00000, 0x0000000100000000, 0x0000000100000000)
  11. the space 5120K, 22% used [0x00000000ffb00000, 0x00000000ffc1d280, 0x00000000ffc1d400, 0x0000000100000000)
  12. Metaspace used 2834K, capacity 4486K, committed 4864K, reserved 1056768K
  13. class space used 302K, capacity 386K, committed 512K, reserved 1048576K

下面进行一点一点的分析

0.244: [GC (Allocation Failure) 0.245: [ParNew: 3170K->512K(4608K), 0.0015722 secs] 3170K->1652K(9728K), 0.0028240 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

0.244 : 系统启动0.244秒后,发生。

GC (Allocation Failure) : GC发生的原因,对象分配失败。

0.245:系统运行0.245秒的时候发生。

[ParNew: 3170K->512K(4608K), 0.0015722 secs] :
ParNew进行了垃圾回收, 新生代可用的总空间大小=4608K = Eden区 + 1个Survivor区, 回收前占用了3170K , 回收后,新生代还占用了512K。 本次回收使用了,0.0015722 秒。

3170K->1652K(9728K), 0.0028240 secs
这部分是对整个堆空间的内存回收情况的说明, 整个堆空间(新生代+老年代) = 9728K , 回收前使用了3170K , 回收后还有1652K的内存被使用。 本次GC总共使用了 0.0028240 secs 秒。

第一行 : parNew管理了 总共的内存是 4608K , 已经使用掉3704K 。
第二行:eden区,一共有4096K , 已经有 77% 的空间被使用了。
第三行:survivor from区,一共有512K, 已经有 100% 的空间被使用了,已经满了。
第四行:survivor to区,一共有512K, 还没有任何的使用。里面是空的。

tenured generation   total 5120K, used 1140K [0x00000000ffb00000, 0x0000000100000000, 0x0000000100000000)
   the space 5120K,  22% used [0x00000000ffb00000, 0x00000000ffc1d280, 0x00000000ffc1d400, 0x0000000100000000)

第一行 :老年代一共有5120K空间,已经使用了1140K。
第二行: 老年代有 5120K的空间,已经使用了 22%的空间。

 Metaspace       used 2834K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 302K, capacity 386K, committed 512K, reserved 1048576K

used:加载的类的空间量。
capacity: 当前分配块的元数据的空间。
committed: 空间块的数量。
reserved:元数据的空间保留(但不一定提交)的量。

最后的数据可以参考这篇文章:GC日志中,Metaspace的这几个参数你知道吗?