GC日志是指Java虚拟机在垃圾回收过程中产生的记录。它可以用于分析应用程序的性能问题和内存泄漏等方面。GC日志包括哪些内容主要包括以下几个方面:
- GC类型和阶段
GC日志中会记录每个GC类型的具体信息,例如Full GC和Young GC,同时还会记录GC的阶段,包括Mark和Sweep等。
例如:Young GC 日志信息:
[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
- GC发生的原因
GC日志中还会记录GC发生的原因,例如Allocation Failure、System.gc()、JVM调用gc等。
例如:Allocation Failure 日志信息:
[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
- 内存变化情况
GC日志中包括内存的变化情况,包括每个内存区域的使用情况以及整个堆内存的使用情况。
例如:Young GC 日志信息:
[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
其中 [PSYoungGen: 33792K->5120K(38400K)] 是指Young Generation的使用情况,它的使用量从33792K减少到5120K,它的总大小为38400K; 33792K->16008K(125952K) 是指整个堆内存的使用情况,它的使用量从33792K增加到16008K,它的总大小为125952K。
- 时间情况
GC日志中还会记录执行GC所花费的时间以及相关的系统时间。
例如:Young GC 日志信息:
[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
其中 Times: user=0.01 sys=0.00, real=0.01 secs 是指GC的时间,它分别花费了0.01秒的用户时间、0秒的系统时间以及0.01秒的实际时间。
示例1:
在JVM启动参数中加入如下参数,可以打印GC日志:
-verbose:gc
打印出来的GC日志如下所示:
[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 5120K->0K(38400K)] 16008K->16008K(125952K), 0.0081530 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
[Full GC (Ergonomics) [PSYoungGen: 0K->0K(38400K)] [ParOldGen: 110316K->40199K(87552K)] 110316K->40199K(125952K), [Metaspace: 2825K->2825K(1056768K)], 0.0240453 secs] [Times: user=0.01 sys=0.01, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 34816K->5120K(38400K)] 75015K->69135K(125952K), 0.0125119 secs] [Times: user=0.00 sys=0.01, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 39936K->5126K(38400K)] 120495K->116970K(125952K), 0.0168332 secs] [Times: user=0.01 sys=0.01, real=0.02 secs]
示例2:
在JVM启动参数中加入如下参数,可以打印详细的GC日志:
-XX:+PrintGCDetails
打印出来的GC日志如下所示:
[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[Full GC (Ergonomics) [PSYoungGen: 5120K->0K(38400K)] [ParOldGen: 10888K->16343K(87552K)] 16008K->16343K(125952K), [Metaspace: 2825K->2825K(1056768K)], 0.0147972 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 34816K->5120K(38400K)] 69135K->80413K(125952K), 0.0118978 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]
[Full GC (Ergonomics) [PSYoungGen: 5120K->0K(38400K)] [ParOldGen: 75394K->42796K(87552K)] 80515K->42796K(125952K), [Metaspace: 2825K->2825K(1056768K)], 0.0211472 secs] [Times: user=0.01 sys=0.01, real=0.02 secs]
以上两个示例演示了如何打印GC日志,并说明了GC日志包括的内容及其含义,对于多数的性能问题和内存泄漏问题,分析GC日志是非常有用的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GC日志包括哪些内容? - Python技术站