触发 Full GC(Full Garbage Collection)是 Java 性能调优和故障排查中非常核心的问题。Full GC 会对整个堆内存(包括年轻代、老年代,以及元空间/永久代)进行垃圾回收。由于它会引发显著的 STW(Stop-The-World,暂停所有应用线程),因此在生产环境中通常需要尽量避免。 以下是触发 Full GC 的常见条件,可以归纳为以下几大类: 1. 老年代空间不足 (Old Generation Exhaustion) 这是触发 Full GC 最常见的原因。当对象从年轻代晋升到老年代,或者大对象直接分配到老年代,导致老年代剩余空间不足时,就会触发 Full GC。 大对象直接进入老年代: 代码中创建了非常大的数组或字符串,超过了 设置的阈值,直接在老年代分配,导致老年代迅速填满。 长期存活的对象进入老年代: 系统的并发量大,对象存活时间长,熬过了多次 Minor GC(达到 ),大量进入老年代。 内存泄漏: 某些对象不再使用,但由于被 GC Roots 强引用导致无法回收,老年代空间持续上涨,最终撑爆。 2. 元空间 / 永久代空间不足 (...