Java中评估每次GC回收内存大小,应直接计算日志中“->”前后数值差:年轻代回收量=A−B,整个堆回收量=X−Y,单位统一转为MB并保留一位小数;Minor GC看年轻代字段,Full GC需累加各区域,Mixed GC统计Old Region变化总和与Eden清空量;避免依赖百分比,可用jstat验证。

Java 中评估每次 GC 回收的内存大小,关键不是看“效率百分比”,而是直接从日志中提取回收前后的数值差——这个差值就是本次 GC 实际释放的内存量,单位通常是 KB 或 MB。
看日志中明确的“->”结构
GC 日志里每行都包含类似 [PSYoungGen: A->B(C)] X->Y(Z) 的格式,其中:
-
年轻代回收量 = A − B(如
123456K->8912K→ 回收约 114.5MB) -
整个堆回收量 = X − Y(如
245678K->134567K→ 回收约 111.1MB) - 两者差值(约 3.4MB)可粗略视为本次晋升到老年代的对象大小
区分 GC 类型,对应不同区域
不同 GC 类型影响你读哪部分数据:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Minor GC:重点看中括号内年轻代字段(如
PSYoungGen或G1 Evacuation Pause中 Eden/Survivor 行),回收量基本等于 Eden 清空量 + Survivor 溢出量 -
Full GC:需同时看老年代(
Tenured或Old)、元空间(Metaspace)等多行,分别计算各区域释放量再累加 - Mixed GC(G1):日志中会列出多个 Region 的 “Before / After”,回收量是所有 Old Region 变化总和 + Eden 清空量
注意单位与精度
日志默认用 KB,但不同 JDK 版本或参数可能显示 MB 或带小数。建议统一转为 MB 计算,保留一位小数便于趋势观察:
立即学习“Java免费学习笔记(深入)”;
- 例如
123456K≈ 120.6MB,8912K≈ 8.7MB,差值 ≈ 111.9MB - 避免直接用百分比替代绝对值——一次回收 90% 的 10MB(仅 9MB)和回收 70% 的 200MB(140MB),实际释放量天差地别
结合 jstat 快速验证
如果日志缺失或需实时比对,可用 jstat -gc <pid> 查看累计释放量:
-
EU(Eden 使用量)下降值 ≈ 本次 Minor GC 释放的 Eden 空间 -
OU(Old 使用量)若明显上升,说明有大量对象晋升,真实回收量可能被抵消 - 对比
YGC次数与YGCT总耗时,能判断单次回收是否稳定

















