allocation failure 表示新生代 eden 区空间不足触发 minor gc,是对象分配失败的直接信号;高频出现意味着 eden 过小、对象存活率高或存在短命大对象,还可能连锁引发因晋升失败导致的 full gc。

Allocation Failure 表示 JVM 在尝试为新对象分配内存时,发现对应区域没有足够可用空间,于是触发了一次垃圾回收。
它通常出现在 Minor GC 日志中
比如:[GC (Allocation Failure) [PSYoungGen: 33280K->5088K(38400K)] ...。这说明问题出在新生代 Eden 区——JVM 想在这里 new 一个对象,但 Eden 已满,连一次 Minor GC 都来不及等,只能立刻启动回收流程。
- 不是“偶尔卡一下”,而是新生代持续承压的明确信号
- 高频出现往往意味着 Eden 太小、对象存活率偏高,或存在短命大对象(如临时 byte[]、JSON 解析结果)
- 如果紧随其后的
PSYoungGen: A->B(C)显示回收后 Eden 使用量(B)仍接近总容量(C),说明 GC 效果差或对象根本没死
它也可能引发 Full GC
当 Minor GC 后仍有大量对象要晋升,而老年代剩余空间不足或碎片化严重,JVM 就会升级为 Full GC (Allocation Failure)。此时问题已从“新生代不够用”演变为“整个堆扛不住分配压力”。
- 常见于大对象直接进入老年代、长期存活对象集中晋升、Metaspace 耗尽间接触发等情况
- 不能只看“有没有 Full GC”,关键要看这次 Full GC 是不是由 Allocation Failure 连锁导致的
它和分配速率强相关
Allocation Failure 的频率直接反映应用的 对象分配速率(单位时间创建多少 MB 对象)。速率过高会导致 GC 频繁、STW 累积、CPU 消耗剧增。
- 可通过连续 GC 日志的时间戳和堆变化量估算:例如 0.291 秒和 0.446 秒两次日志间,堆使用量从 33280K 升至 57640K → 约 156 ms 分配了 24MB,速率约 154 MB/s
- 速率超过 100 MB/s 就值得警惕,尤其在低延迟服务中
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











