在Java技术面试中,JVM垃圾回收(GC)机制是高频考点之一。
很多互联网公司在面试Java工程师时都会重点考察:

  • JVM内存结构
  • 垃圾回收算法
  • 垃圾回收器
  • GC调优经验

本文整理了 JVM垃圾回收面试题50道(含答案解析),帮助Java开发者系统复习GC相关知识。

适合人群:

  • Java后端开发工程师
  • 准备跳槽涨薪的程序员
  • 想深入理解JVM原理的开发者

Java面试题

如果你想查看更多 JVM面试题 + AI答案解析

👉 https://myquotego.com/html/questions?_from=csdn_158935763_1


一、垃圾回收基础面试题(1-10)

1、什么是垃圾回收(GC)?

垃圾回收是指 自动回收程序中不再使用对象所占用内存 的机制,从而避免内存泄漏。


2、为什么Java需要垃圾回收?

因为Java程序员不需要手动管理内存,JVM通过GC自动回收无用对象,降低内存泄漏风险。


3、Java如何判断对象是否需要回收?

主要通过 可达性分析算法(Reachability Analysis) 判断对象是否可达。


4、什么是GC Roots?

GC Roots是可达性分析的起点。

常见GC Roots包括:

  • 虚拟机栈中的引用
  • 方法区中的静态变量
  • 常量引用
  • JNI引用

5、什么是引用计数法?

每个对象维护一个引用计数,当计数为0时表示对象可回收。

缺点:

  • 无法解决循环引用问题。

6、什么是可达性分析?

从GC Roots出发进行搜索,如果对象不可达,则判定为垃圾对象。


7、什么是对象复活?

对象在finalize方法中可能重新被引用,从而避免被回收。


8、什么是强引用?

最常见引用方式,只要存在强引用,对象不会被回收。


9、Java中有哪些引用类型?

四种:

  • 强引用
  • 软引用
  • 弱引用
  • 虚引用

10、软引用有什么作用?

当内存不足时,软引用对象会被回收,常用于 缓存实现


更多JVM垃圾回收面试题:

👉 https://myquotego.com/html/questions?_from=csdn_158935763_2


二、垃圾回收算法面试题(11-20)

11、常见GC算法有哪些?

主要包括:

  • 标记清除算法
  • 复制算法
  • 标记整理算法
  • 分代收集算法

12、什么是标记清除算法?

分为两步:

  1. 标记需要回收的对象
  2. 清除这些对象

缺点:

  • 会产生内存碎片

13、什么是复制算法?

将内存分为两块,每次只使用其中一块,回收时复制存活对象。

优点:

  • 不产生碎片

缺点:

  • 浪费内存

14、什么是标记整理算法?

标记存活对象后,将对象向一端移动,整理内存空间。


15、什么是分代收集?

根据对象生命周期不同,将堆分为:

  • 新生代
  • 老年代

16、新生代为什么使用复制算法?

因为新生代 存活对象少,回收效率高


17、老年代为什么使用标记整理?

因为老年代 对象存活率高


18、什么是Stop The World?

GC执行时 暂停所有用户线程


19、什么是Minor GC?

发生在 新生代 的垃圾回收。


20、什么是Full GC?

对整个堆进行垃圾回收。


三、垃圾回收器面试题(21-35)

21、常见垃圾回收器有哪些?

  • Serial
  • ParNew
  • Parallel Scavenge
  • CMS
  • G1

22、Serial收集器特点?

  • 单线程
  • Stop The World

23、Parallel Scavenge特点?

  • 多线程
  • 吞吐量优先

24、CMS收集器特点?

  • 并发收集
  • 低停顿

25、CMS的缺点?

  • 内存碎片
  • 需要更多CPU资源

26、G1垃圾回收器是什么?

G1是 面向服务端应用的低延迟GC收集器


27、G1的核心思想?

将堆划分为多个 Region区域


28、G1如何控制停顿时间?

通过 可预测停顿时间模型


29、G1回收流程?

主要包括:

  • 初始标记
  • 并发标记
  • 最终标记
  • 筛选回收

30、什么是Mixed GC?

同时回收:

  • 新生代
  • 部分老年代

四、GC调优面试题(36-50)

36、常见JVM调优参数?

例如:
-Xms
-Xmx
-Xmn
-XX:+UseG1GC


37、如何查看GC日志?

可以使用:

-XX:+PrintGCDetails


38、什么是内存泄漏?

对象不再使用但仍然被引用,无法被GC回收。


39、常见内存泄漏场景?

例如:

  • 静态集合
  • ThreadLocal未清理
  • 监听器未释放

40、如何分析内存问题?

常见工具:

  • jmap
  • jstack
  • jvisualvm

41、什么是堆转储(Heap Dump)?

JVM内存快照,用于分析内存问题。


42、如何生成Heap Dump?

可以使用:

jmap -dump


43、什么是Young GC频繁问题?

新生代太小导致GC频繁。


44、什么是Full GC频繁问题?

老年代空间不足。


45、如何减少GC次数?

可以:

  • 增大堆内存
  • 优化对象创建

46、如何减少GC停顿时间?

可以:

  • 使用G1
  • 优化堆大小

47、什么是对象晋升?

对象从新生代进入老年代。


48、什么是大对象?

较大的对象可能直接进入老年代。


49、什么是GC调优核心目标?

主要目标:

  • 降低停顿时间
  • 提高吞吐量

50、GC调优常见思路?

步骤:

  1. 查看GC日志
  2. 分析内存使用
  3. 调整JVM参数

更多Java面试题整理

JVM面试题
MySQL面试题
Redis面试题
Spring面试题

完整面试题库:

https://myquotego.com/html/questions?_from=csdn_158935763_3

支持:

  • AI模拟面试
  • AI答案解析
  • 2000+面试题
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐