← 每日面试题 学习看板

YoungGC和FullGC的触发条件是什么?

面试题/00java/03JVM/05分代与GC触发条件/YoungGC和FullGC的触发条件是什么?.md

面试记录 2026-10-16

题目:YoungGC和FullGC的触发条件是什么?

难度:low

标签:jvm/gc, general/knowledge, difficulty/low

评分:⭐⭐⭐☆☆(3/5)

我的回答

ygc的触发条件是年轻代空间达到满溢比例,然后开始进行年轻代中eden区和s1区的回收;

fgc触发条件就相对较多了,老年代空间使用到一定比例应该是80%会触发fgc进行老年代回收,这里不同的垃圾回收器有不同的处理比如G1就引入了mgc,提前会做一次老年代部分空间的回收,而不是直接触发fgc;

另外方法区出现空间不足也会引起fgc进行垃圾回收;

点评

优点:

不足:

补充:完整 FGC 触发条件有 6 种,避免策略有 3 种。

完整讲解

第一部分:知识重点剖析

核心考点定位:考察对 YoungGC 和 FullGC 触发机制的完整理解,以及 FGC 的避免策略。

知识点拆解:

  1. YoungGC 触发条件:Eden 区满(默认,最常见)、大对象直接在老年代分配导致老年代空间不足触发 FGC 前先 YoungGC、手动 System.gc() 建议回收新生代
  2. FullGC 完整触发条件(6 种):老年代空间不足(对象晋升、大对象直接分配)、Survivor 空间不足(空间分配担保失败)、Metaspace 不足、System.gc() 显式调用、-XX:+ExplicitGCInvokesConcurrent 触发并发 Full GC、G1 的 Mixed GC 跟不上回收速度退化到 Full GC
  3. FGC 的避免策略:增大老年代、调整晋升阈值(MaxTenuringThreshold)、用 G1 Mixed GC 替代 Full GC、避免大对象直接进入老年代

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. G1 的 Mixed GC 和 Full GC 有什么区别?
  1. 如何避免 FGC?
  1. System.gc() 有什么影响?

第三部分:面试者参考回答(三步法口语化,300-400 字)

【一句话结论】

面试官您好,YoungGC 是 Eden 满触发,FullGC 有 6 种触发条件,核心是老年代空间不足或 Metaspace 不足。

【三点展开】

第一,YoungGC 最常见,Eden 区满就触发,回收新生代,存活对象复制到 Survivor。频率高但速度快,通常 10-100ms。

第二,FullGC 有 6 种触发条件:老年代空间不足(对象晋升或大对象直接分配)、Survivor 空间不足(空间分配担保失败)、Metaspace 不足、System.gc() 显式调用、-XX:+ExplicitGCInvokesConcurrent 触发并发 Full GC、G1 的 Mixed GC 跟不上回收速度退化到 Full GC。其中老年代空间不足是最常见的。

第三,FGC 的避免策略有 3 种:增大老年代空间、调整晋升阈值(MaxTenuringThreshold)让对象更早晋升或更晚晋升、用 G1 的 Mixed GC 替代 Full GC(Mixed GC 是 Young GC + 部分老年代 Region,可预测停顿)。另外要排查内存泄漏,避免对象持续增长导致老年代满。

【一句边界】

当然,System.gc() 在 JDK 9+ 默认关闭,生产环境应禁用(-XX:+ExplicitGCInvokesConcurrent 改为 -XX:-ExplicitGCInvokesConcurrent)。FGC 是最后手段,频繁触发说明有内存泄漏或参数配置不当。