【大白话说Java面试题 第44题】【JVM篇】第4题:什么时候会触发 Young GC?什么时候会触发 Full GC?

📌 PDF :大白话说Java面试题 --- 02-JVM篇

第4题:什么时候会触发 Young GC?什么时候会触发 Full GC

📚 回答:

  • 一句话概括
    • Young GC:当新生代(Eden 区)内存不足时触发。
    • Full GC:当 JVM 整体内存不足(包括老年代或元空间)时触发。

1. Young GC 的触发条件
  • 常见场景

    • 新对象不断被创建,占满 Eden 区后触发 Young GC。
    • 如果 Survivor 区无法容纳存活对象,则部分对象会被晋升到老年代。
  • 底层原理

    • Young GC 使用的是复制算法,将 Eden 区和 Survivor 区的存活对象复制到另一个 Survivor 区。如果 Survivor 区空间不足,则直接晋升到老年代。

2. Full GC 的触发条件
  • 常见场景

    1. 老年代空间不足:当老年代无法容纳从年轻代晋升的对象时,触发 Full GC。
    2. 元空间不足:当元空间(存储类元信息)空间不足时,触发 Full GC。
    3. 手动调用 System.gc():虽然不一定会立即触发 Full GC,但会建议 JVM 进行垃圾回收。
    4. 显式分配担保失败:当年轻代的对象无法通过分配担保机制转移到老年代时,触发 Full GC。
  • 底层原理

    • Full GC 使用的是标记-清除标记-整理算法,扫描整个堆区并回收垃圾对象。

3. 注意事项
  • 优化建议

    • 减少 Young GC:适当增大 Eden 区的大小,避免频繁触发 Young GC。
    • 减少 Full GC:合理设置老年代和元空间的大小,避免内存不足。
  • 监控工具

    • 使用 JVM 自带的工具(如 jstatjvisualvm)监控 GC 行为,分析 GC 日志,找出瓶颈并优化。

    💡 面试官视角

  • 面试官可能会问"如何监控和分析 GC 行为?"答:可以使用 jstat 查看 GC 统计信息,或者通过 -XX:+PrintGCDetails 输出 GC 日志进行分析。

  • 面试官可能会追问"什么是分配担保机制?"答:当年轻代的对象无法放入 Survivor 区时,会尝试将其直接晋升到老年代;如果老年代空间不足,则触发 Full GC。

相关推荐
陈随易1 小时前
FFmpeg 9.0 发布,代号 Lei,音视频处理再升级
前端·后端·程序员
隐积2 小时前
3.1.7.Qt容器大家族(3):QVariant——万能盒子
开发语言·qt
凌虚4 小时前
面向 MySQL 用户的 PostgreSQL 快速上手指南
数据库·后端·架构
都叫我大帅哥5 小时前
Java JJWT 完全指南:从入门到生产级实践
java
名字还没想好☜5 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
IT_陈寒6 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
初级代码游戏6 小时前
iOS开发 Swift 速记1:变量和基本数据类型
开发语言·ios·swift
前端开发张小七6 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
海盗12346 小时前
微软技术周报 ——2026-08-03
后端·python·microsoft·c#·.netcore
沙湖遇雨6 小时前
6. Pipeline 的生命周期
后端