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时间相同。
相关推荐
星依网络4 分钟前
使用LabelImg工具标注数据(游戏辅助脚本开发)
python·游戏引擎·图形渲染·骨骼绑定
站大爷IP4 分钟前
Appium实现Android应用数据爬取:从环境搭建到实战优化
python
LSL666_7 分钟前
12 MyBatis的连接池
java·服务器·mybatis
Arva .9 分钟前
说说线程的生命周期和状态
java·开发语言
tryxr16 分钟前
HashTable、HashMap、ConcurrentHashMap 之间的区别
java·开发语言·hash
无事好时节21 分钟前
Linux 线程
java·开发语言·rpc
我家领养了个白胖胖26 分钟前
Prompt、格式化输出、持久化ChatMemory
java·后端·ai编程
IT老兵202533 分钟前
PyTorch DDP多GPU训练实践问题总结
人工智能·pytorch·python·分布式训练·ddp
sszdlbw39 分钟前
后端springboot框架入门学习--第二篇
java·spring boot·学习
阿拉斯攀登40 分钟前
MyBatis 全面解析 & Spring Boot 集成实战
java·spring boot·mybatis·持久层框架