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 secs 或 0.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时间相同。
相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
长沙三为智能科技3 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python