JVM学习-java垃圾回收(二)-GC日志

本文介绍GC日志的作用及如何通过不同参数配置获取简单或详细的GC日志,包括GC类型、堆空间使用情况及时间信息等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GC 日志是一个分析Java内存回收有用的工具,它能准确的记录每一次GC的执行时间和结果

GC or Full GC

关于Full GC,容易有误解,以为是堆全部年代内存GC;其实”Full” 并不是用来区分新生代GC和老年代GC,只是表示这次GC发生了”Stop The World(STW)”

-XX:+PrintGC

这个参数开启简单的GC日志模式,为每次的GC或Full GC打印一条信息,如:

[GC 1331K->568K(124416K), 0.0009585 secs]
[Full GC 568K->473K(124416K), 0.0072450 secs]

开头为GC类型(GC or Full Gc),然后是GC前和GC后使用堆空间大小,然后括号中是堆大小,最后是GC执行时间(秒)

简单模式的GC日志是与收集器无关的,也没有提供其他信息;

-XX:+PrintGCDetails

这个参数打印详细GC日志,在这种模式下,日志格式与收集器相关,比如以下Parallel Scavenge + Serial Old 收集器组合:

[GC [PSYoungGen: 32051K->600K(38400K)] 32051K->10840K(124416K), 0.0076132 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
[Full GC [PSYoungGen: 600K->0K(38400K)] [ParOldGen: 10240K->10712K(86016K)] 10840K->10712K(124416K) [PSPermGen: 2541K->2540K(21504K)], 0.0409766 secs] [Times: user=0.05 sys=0.00, real=0.04 secs]

格式和简单模式差不多,但是更详细:
开头是GC类型,然后是不同年代内存区域GC的信息,PSYoungGen 表示新生代,ParOldGen 表示老年代,PSPerGen 表示永久区
最后是详细的时间信息,user 是用户态消耗的CPU时间,sys 是内核态消耗的CPU时间,而real 是操作从开始到结束的墙中时间(包括各种非计算的等待耗时,如I/O、线程阻塞),当系统有多CPU(多核)情况下,多线程会叠加这些CPU时间,所有user 或 sys 时间超过real是正常的;

对于不同的垃圾收集器,打印出来的日志会有不同,主要区别在对于新生代、老年代、永久代内存的命名上,如上面的是使用 Parallel Scavenge + Serial Old 垃圾收集器:
- 其中新生代:PSYoungGen
- 老年代:ParOldGen
- 永久代:PSPermGen

对于Serial + Serial Old,格式比如:

[GC[DefNew: 6979K->472K(9216K), 0.0040385 secs] 6979K->6616K(19456K), 0.0040830 secs] [Times: user=0.02 sys=0.00, real=0.00 secs] 
[Full GC[Tenured: 0K->1496K(86400K), 0.0054293 secs] 3764K->1496K(125312K), [Perm : 2541K->2541K(21248K)], 0.0054809 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
  • 新生代:DefNew(def new generation)
  • 老年代:Tenured
  • 永久代:Perm

对于Serial + ParNew
- 其中新生代:ParNew(par new generation)
- 老年代:Tenured
- 永久代:Perm

对于 ParNew + CMS + Serial Old
- 新生代:DefNew(def new generation)
- 老年代:CMS
- 永久代:CMS Perm

对于 Parallel Scavenge + Parallel Old
- 新生代:PSYoungGen
- 老年代:ParOldGen
- 永久代:PSPermGen

Java 虚拟机中,垃圾收集器一直都在不断的优化提高,对于不同收集器的GC日志格式可能会有一点变化,但是总体格式都是不会变的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值