GC的查看

gc日志:📎log.txt

看法简述:

内存的状况(只是展示堆用,不对应任何日志信息)

示例片段1

复制代码
[GC (Allocation Failure) [PSYoungGen: 64604K->10120K(75776K)] 64604K->61328K(249344K), 0.0114108 secs] [Times: user=0.06 sys=0.03, real=0.01 secs] 
  1. 事件类型
    • [GC (Allocation Failure)]:这表示这是一个垃圾回收事件,具体原因是分配失败(即没有足够的内存来分配新对象)。
  1. 垃圾回收范围
    • [PSYoungGen: 64604K->10120K(75776K)]:这是年轻代(PSYoungGen)的垃圾回收详情。
      • 64604K 是垃圾回收前年轻代使用的总内存。
      • 10120K 是垃圾回收后年轻代使用的总内存。
      • (75776K) 是年轻代的总大小。
  1. 整体堆信息
    • 64604K->61328K(249344K):整个Java堆的信息。
      • 64604K 垃圾回收前整个堆使用的内存。
      • 61328K 垃圾回收后整个堆使用的内存。
      • (249344K) Java堆的总大小。
  1. 消耗时间
    • 0.0114108 secs:这次垃圾回收总共花费的时间是0.0114108秒。
  1. CPU时间
    • [Times: user=0.06 sys=0.03, real=0.01 secs]:提供了关于CPU使用情况的更详细信息。
      • user=0.06 用户模式下CPU使用的时间。
      • sys=0.03 系统模式下CPU使用的时间。
      • real=0.01 实际经过的时间,与前面提到的总的GC时间相同。

示例片段2

复制代码
[GC (System.gc()) [PSYoungGen: 1300K->32K(75776K)] 2126K->857K(249344K), 0.0003581 secs]
[Full GC (System.gc()) [PSYoungGen: 32K->0K(75776K)] [ParOldGen: 825K->825K(173568K)] 857K->825K(249344K), [Metaspace: 3578K->3578K(1056768K)], 0.0059335 secs]

1. GC事件类型

  • Minor GC (年轻代垃圾回收):在日志中表现为 [GC (System.gc()) [PSYoungGen: ...] 或者不带 (System.gc()) 的类似行。
  • Full GC (全堆垃圾回收):通常会看到 [Full GC (System.gc()) [PSYoungGen: ...] [ParOldGen: ...] 这样的条目。

上面的第一条是Minor GC,它清理了年轻代的部分对象。

第二条是一个Full GC,它同时清理了年轻代和老年代的对象。

2. 内存使用情况

每个GC事件都会报告内存使用前后的情况:

  • PSYoungGen: 1300K->32K(75776K) 表示年轻代从使用了1300KB减少到32KB,总容量为75776KB。
  • 2126K->857K(249344K):堆总空间249344k,回收前使用2126k,回收后使用857k
  • ParOldGen: 825K->825K(173568K) 显示老年代在GC前后大小没有变化,说明老年代中没有可以回收的对象或空间已经非常紧张。
  • (249344K) 是整个堆的大小,包括年轻代和老年代。

3. GC的频率和耗时

  • 每次GC都有一个时间记录,比如 0.0003581 secs0.0059335 secs,这表示该次GC操作花费的时间。
  • 频繁出现的GC事件(尤其是Full GC),如果每次耗时较长,则可能是潜在的问题,因为它会影响应用性能。

示例片段3

复制代码
[Full GC (Ergonomics) [PSYoungGen: 10272K->0K(140800K)] [ParOldGen: 249894K->250919K(525312K)] 260166K->250919K(666112K), [Metaspace: 3941K->3941K(1056768K)], 0.0146315 secs] [Times: user=0.08 sys=0.00, real=0.02 secs]
  1. 事件类型
    • [Full GC (Ergonomics)]:这是一次由JVM为了优化性能(根据Ergonomics算法)而触发的Full GC。这意味着JVM自动决定进行一次完整的垃圾回收来释放内存。
  1. 年轻代(PSYoungGen)信息
    • [PSYoungGen: 10272K->0K(140800K)]
      • 10272K 表示GC前年轻代使用的内存。
      • 0K 表示GC后年轻代使用的内存,即所有存活的对象都被移到了老年代或其他地方,当前年轻代没有占用任何内存。
      • (140800K) 是年轻代的总大小。
  1. 老年代(ParOldGen)信息
    • [ParOldGen: 249894K->250919K(525312K)]
      • 249894K 表示GC前老年代使用的内存。
      • 250919K 表示GC后老年代使用的内存,可以看到实际上老年代使用的内存量有所增加,这可能是因为从年轻代移动过来的对象。
      • (525312K) 是老年代的总大小。
  1. 整体堆信息
    • 260166K->250919K(666112K)
      • 260166K 表示GC前整个Java堆使用的内存总量(年轻代+老年代)。
      • 250919K 表示GC后整个Java堆使用的内存总量。
      • (666112K) 是整个Java堆的最大容量。
  1. Metaspace信息
    • [Metaspace: 3941K->3941K(1056768K)]:表示Metaspace(元空间,用于存储类的元数据)在GC前后使用量没有变化,分别为3941KB,最大容量为1056768KB。
  1. 消耗时间
    • 0.0146315 secs:这次Full GC总共花费的时间是0.0146315秒。
  1. CPU时间
    • [Times: user=0.08 sys=0.00, real=0.02 secs]:提供了关于CPU使用情况的更详细信息。
      • user=0.08 用户模式下CPU使用的时间。
      • sys=0.00 系统模式下CPU使用的时间。
      • real=0.02 实际经过的时间,与前面提到的总的GC时间相同。
相关推荐
小鸡脚来咯7 分钟前
MVCC实现原理
java·开发语言·数据库
小鹭同学_20 分钟前
Java基础 Day20
java·开发语言
风清扬雨26 分钟前
计算机视觉中的可重复性:深入案例分析与Python代码实现
python·opencv·计算机视觉
浩浩测试一下40 分钟前
Apache OFBiz 17.12.01 的远程命令执行漏洞 -Java 反序列化 + XML-RPC 请求机制
xml·java·安全·web安全·网络安全·apache·安全架构
David Bates1 小时前
代码随想录第42天:图论3
python·并查集
27669582921 小时前
开盘啦 APP 抓包 逆向分析
java·python·app抓包·抓包分析·开盘啦
啥都想学的又啥都不会的研究生1 小时前
log日志最佳实践
java·spring boot·后端·spring·junit·log4j·logback
白开水不加冰1 小时前
JVM 的垃圾回收器
java·jvm
qq_12498707531 小时前
基于Spring boot+vue的中医养生系统的设计与实现(源码+论文+部署+安装+调试+售后)
java·vue.js·spring boot·后端·毕业设计
为美好的生活献上中指1 小时前
java每日精进 5.25【Redis缓存】
java·redis·缓存