什么场景触发fullGC
Full GC(Full Garbage Collection)是一种涉及整个 JVM 堆内存(包括年轻代、老年代以及永久代或元空间)的垃圾回收过程。由于 Full GC 清理的范围广泛,它通常会对应用程序的性能产生较大的影响,因此触发 Full GC 的场景需要谨慎处理。以下是触发 Full GC 的常见场景:
-
调用
System.gc()
方法: 开发人员或系统管理员可能会手动调用System.gc()
方法来建议 JVM 执行 Full GC。然而,这并不意味着 JVM 必须立即执行 Full GC,因为垃圾回收器会根据当前的内存状况和策略来决定是否执行。 -
老年代空间不足: 当老年代的可用空间不足以存放新创建的大对象或 Minor GC 后晋升到老年代的对象时,会触发 Full GC。这是 Full GC 最常见的触发原因。
-
永久代(Permanent Generation)或元空间(Metaspace)空间不足: 永久代存储类的元数据信息,在 Java 8 之后被 Metaspace 替代。当永久代或 Metaspace 空间不足时,也可能触发 Full GC。不过,在 Java 8 及以后的版本中,Metaspace 的大小是弹性调整的,不一定会触发 Full GC。
-
Promotion Failure: 当 Minor GC 发生时,如果 Survivor 区无法容纳存活的对象,这些对象将被晋升到老年代。如果此时老年代空间不足,将发生 Promotion Failure,从而触发 Full GC。
-
Concurrent Mode Failure: 当使用并发标记清扫(CMS)垃圾回收器时,如果在并发清扫阶段无法完成,或者在并发清扫过程中发现老年代空间不足,将触发 Full GC。
-
Handle Promotion Failure 设置: 即使在 Minor GC 后老年代空间足够存放晋升的对象,如果设置了 Handle Promotion Failure,且 Minor GC 后晋升到老年代的对象平均大小大于老年代剩余空间,也会触发 Full GC。
-
长时间未使用的对象在老年代积累过多: 如果老年代中积累了大量的长时间未使用的对象,JVM 可能会决定执行 Full GC 来释放这部分内存。
-
JVM 内部策略: 根据 JVM 的内部策略和当前运行的垃圾回收器,还有可能有其他特定条件触发 Full GC。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署