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时间相同。
相关推荐
艾迪的技术之路19 分钟前
redisson使用lock导致死锁问题
java·后端·面试
qianbo_insist23 分钟前
c++ python 共享内存
开发语言·c++·python
今天背单词了吗98037 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师40 分钟前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
东阳马生架构1 小时前
订单初版—2.生单链路中的技术问题说明文档
java
凌览1 小时前
有了 25k Star 的MediaCrawler爬虫库加持,三分钟搞定某红书、某音等平台爬取!
前端·后端·python
这里有鱼汤1 小时前
给你的DeepSeek装上实时行情,让他帮你炒股
后端·python·mcp
咖啡啡不加糖1 小时前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南1 小时前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端