程序中打印的GC日志如何查看?
CommandLine flags: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:MaxNewSize=5242880 -XX:NewSize=5242880 -XX:OldPLABSize=16 -XX:PretenureSizeThreshold=10485760 -XX:+PrintGC -XX:+PrintGCDetails
这一行就是告诉我们程序采用的JVM参数是什么。
1。一次GC的概要说明
0.112: [GC (Allocation Failure) 0.112: [ParNew: 3392K->390K(4608K), 0.0023184 secs] 3392K->1416K(9728K), 0.0024007 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
这个就是概要说明了本次GC的执行情况。
GC (Allocation Failure) 对象分配失败,因为我们把参数设置的很小,导致Eden区内存不够导致Young GC
那这次GC是什么时候发生的?
0.112这个数字代表系统运行多久后发生了GC,毫秒
ParNew: 3392K->390K(4608K), 0.0023184 secs
ParNew的意思就是触发了Young GC,年轻代我们用的是ParNew垃圾回收器
3392K->390K(4608K)
这个代表的意思是年轻代可用空间是3392,这个大小是Eden+1个Survivor的大小
然后3392K->390K,意思就是年轻代GC后存活下来390KB对象
0.0023184这个就是本次GC耗费的时间,2.3ms
3392K->1416K(9728K)这段话指的是整个java堆内存情况,整个java堆内存可用9728KB(9.5MB),其实就是年轻代4.5MB+老年代5M,
然后GC前整个Java堆内存里使用了3392KB,GC之后Java堆内存使用了1416KB。
[Times: user=0.02 sys=0.00, real=0.01 secs]
这个意思就是本次GC消耗的时间,毫秒
2。GC过后堆内存使用情况
Heap
par new generation total 4608K, used 3580K [0x00000000ff600000, 0x00000000ffb00000, 0x00000000ffb00000)
eden space 4096K, 77% used [0x00000000ff600000, 0x00000000ff91d700, 0x00000000ffa00000)
from space 512K, 76% used [0x00000000ffa80000, 0x00000000ffae1bb0, 0x00000000ffb00000)
to space 512K, 0% used [0x00000000ffa00000, 0x00000000ffa00000, 0x00000000ffa80000)
concurrent mark-sweep generation total 5120K, used 1026K [0x00000000ffb00000, 0x0000000100000000, 0x0000000100000000)
Metaspace used 3023K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 330K, capacity 388K, committed 512K, reserved 1048576K
这段日志是JVM退出的时候打印出来的当前堆内存的使用情况
par new generation total 4608K, used 3580K [0x00000000ff600000, 0x00000000ffb00000, 0x00000000ffb00000)
eden space 4096K, 77% used [0x00000000ff600000, 0x00000000ff91d700, 0x00000000ffa00000)
from space 512K, 76% used [0x00000000ffa80000, 0x00000000ffae1bb0, 0x00000000ffb00000)
to space 512K, 0% used [0x00000000ffa00000, 0x00000000ffa00000, 0x00000000ffa80000)
par new generation total 4608K, used 3580K,这就是说ParNew垃圾回收器负责的年轻代总共有4608KB可用内存,
目前使用了3580KB
eden space 4096K, 77% used [0x00000000ff600000, 0x00000000ff91d700, 0x00000000ffa00000)
from space 512K, 76% used [0x00000000ffa80000, 0x00000000ffae1bb0, 0x00000000ffb00000)
to space 512K, 0% used [0x00000000ffa00000, 0x00000000ffa00000, 0x00000000ffa80000)
Eden区域使用了77%,From Survivor区512KB使用了76%
concurrent mark-sweep generation total 5120K, used 1026K [0x00000000ffb00000, 0x0000000100000000, 0x0000000100000000)
Metaspace used 3023K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 330K, capacity 388K, committed 512K, reserved 1048576K
concurrent mark-sweep generation total 5120K, used 1026K这个就是说CMS垃圾回收器负责的区域。
Metaspace used 3023K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 330K, capacity 388K, committed 512K, reserved 1048576K
Metaspace元数据空间和class空间,存放类信息,常量池之类总容量,使用内存等等。
参考自:狸猫技术窝