GC 和 Full GC 有什么区别?

✅ 一句话区别(面试时可直接用):

GC 是 JVM 自动回收内存的总称,而 Full GC 是其中一种最重的垃圾回收,会回收整个堆(包括新生代和老年代),开销最大、最容易造成卡顿


🔍 详细解释(适合深入提问)

🔹 GC(Garbage Collection)

  • 广义上的垃圾回收过程

  • 包括:

    • Minor GC(回收新生代)

    • Major GC(回收老年代,有时也叫 Old GC)

    • Full GC(最彻底,回收整个堆 + 方法区)


🔹 Minor GC(也叫 Young GC)

  • 只回收 新生代(Eden + Survivor)

  • 发生频率高,但速度快,影响小

  • 触发条件:

    • Eden 区满了

    • 新生对象分配失败


🔹 Full GC(全堆回收)

  • 回收新生代 + 老年代 + 元空间(Metaspace)

  • 一定是 STW(Stop The World)

  • 最重的一种 GC,容易引发系统卡顿或延迟

  • 触发条件:

    1. 老年代空间不足

    2. 调用 System.gc()(默认会触发)

    3. CMS 回收失败或晋升失败

    4. 元空间(类元信息)满了


🧠 面试答题结构建议:

你可以按这套结构答:


✅ Q: GC 和 Full GC 有什么区别?

GC 是 JVM 自动内存回收机制的总称,具体分为 Minor GC、Major GC 和 Full GC。

  • Minor GC 只清理新生代,开销小,频率高

  • Full GC 是回收整个堆和元空间,代价最大,容易 STW
    我们项目中如果 Full GC 频繁出现,一般说明老年代内存紧张,可能需要优化堆大小、对象生命周期,或检查是否代码中调用了 System.gc()


📌 补充面试加分点:如何判断 & 优化 Full GC?

  1. 如何判断是否发生 Full GC?

    • 查看 GC 日志(如 Full GC 字样)

    • 用 JVisualVM、Arthas、JFR 等工具监控

    • 开启 GC 日志:

      -Xlog:gc* (JDK9+)
      -XX:+PrintGCDetails (JDK8)
      

  2. 如何减少 Full GC?

    • 优化对象创建,避免过早进入老年代

    • 增大堆空间,减轻老年代压力

    • 不手动调用 System.gc()

    • 使用 G1、ZGC 等现代回收器代替 CMS/Parallel Old

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值