当前位置: 首页 > news >正文

JVM--面试题6:如何判断对象可以被垃圾回收?

JVM 面试题:如何判断一个对象可以被垃圾回收?(2026 年最新主流回答)

目前HotSpot JVM(以及几乎所有现代商用 JVM)统一采用可达性分析算法(Reachability Analysis)来判断对象是否“存活”,进而决定是否可以被垃圾回收。

1. 两种主要判断方式对比(面试常问第一层)

算法核心思想优点致命缺点HotSpot 是否采用
引用计数法对象被引用一次,计数器 +1;引用失效 -1;计数为 0 即回收实现简单,回收及时循环引用导致内存泄漏不采用
可达性分析法GC Roots为起点,沿着引用链搜索;不可达 → 可回收能很好解决循环引用问题需要暂停用户线程(STW)采用(主流)

一句话总结
因为引用计数法存在循环引用无法回收的致命缺陷,所以Java 从诞生起就选择了可达性分析算法

2. 可达性分析算法核心流程(最常考点)

  1. 选定一组GC Roots(根对象集合)
  2. 从这些根对象开始,沿着强引用向下搜索(深度优先 / 广度优先均可)
  3. 所有被搜索到的对象标记为可达(活的)
  4. 搜索结束后,堆中所有未被标记的对象→ 判定为垃圾,可以被回收

用图论表述:
如果从 GC Roots 到某个对象不存在任何路径(即不可达),则该对象可以被回收。

3. 哪些对象可以作为 GC Roots?(高频背诵点)

HotSpot JVM 中常见的 GC Roots(2026 年仍然是这几类,顺序基本按重要性排列):

序号GC Roots 类型典型例子是否跨代引用常见
1虚拟机栈(栈帧)中引用的对象方法中的局部变量、方法参数、临时变量非常常见
2方法区中类静态属性引用的对象public static User user;常见
3方法区中常量引用的对象字符串常量池中的字符串字面量(String Table)常见
4本地方法栈中 JNI(Native 方法)引用的对象native 方法中使用的对象较少见
5JVM 内部的引用Class 对象、系统类加载器、常驻异常对象(如 NullPointerException)了解即可
6所有被同步锁(synchronized)持有的对象synchronized(obj)中的 obj了解即可
7JMX、JVMTI 中用于实现调试、监控的引用一些监控工具的回调对象了解即可

面试最常问的前 4 条,背熟即可。

4. “可达性分析不可达” ≠ “马上死亡”(第二次筛选)

即使可达性分析判定为不可达,对象也不一定马上被回收,要经历两次标记过程(经典的“缓刑”机制):

  1. 第一次标记+ 可选的 finalize() 筛选

    • 如果对象没有覆盖 finalize()方法,或者 finalize() 已经被执行过 → 直接进入死亡队列
    • 如果覆盖了 finalize() 且没执行过 → 放入F-Queue 队列,由 Finalizer 线程低优先级执行
  2. 第二次标记

    • 在 finalize() 中重新建立引用链(比如把自己 this 赋值给某个静态变量或成员变量)→ 对象复活,从死亡队列移除
    • 没有复活 → 第二次标记 →真正死亡,下次 GC 真正回收

注意

  • finalize() 是对象逃亡的最后机会,但极不推荐使用(性能差、时机不确定、不安全)
  • 从 JDK 9 开始,finalize() 已被标记为 deprecated,未来版本可能会移除

5. 简洁版标准回答(推荐背诵 30 秒版本)

面试官:JVM 如何判断对象可以被垃圾回收?
答:HotSpot JVM 使用可达性分析算法来判断。
以一组 GC Roots 为起点,沿着引用链进行搜索,从 GC Roots 不可达的对象就被判定为垃圾,可以被回收。
常见的 GC Roots 包括:

  1. 虚拟机栈中局部变量引用的对象
  2. 方法区中静态属性引用的对象
  3. 方法区常量引用的对象
  4. 本地方法栈中 JNI 引用的对象
    即使不可达,也要经历两次标记(包括 finalize() 逃逸机会),才会真正被回收。

6. 延伸加分点(中高级面试)

  • 三色标记算法(并发标记阶段使用,避免漏标、重复标)
  • SATB、Incremental Update(写屏障解决并发问题)
  • 跨代引用(年轻代 → 老年代的引用如何处理?Remembered Set / Card Table)
  • 根对象扫描的 STW 时间(CMS、G1、ZGC、Shenandoah 的优化对比)

你现在是准备初级/中级/高级面试?
或者想继续深挖某个垃圾收集器(G1/ZGC/Shenandoah)里是怎么处理 GC Roots 扫描的?可以直接告诉我,我继续给你针对性答案。

http://www.jsqmd.com/news/418675/

相关文章:

  • 学长亲荐 8个AI论文网站:研究生毕业论文写作与格式规范全测评
  • 百度网盘资源获取工具:高效检索与权限管理解决方案
  • 初识Markdown
  • UDOP-large优化升级:英文文档摘要生成与版面布局分析实战指南
  • 静态时序分析Static Timing Analysis2——时序路径优化、多周期路径与伪路径约束实战
  • 基于Qwen3-ASR的播客内容分析系统开发
  • 为什么自己写的论文也被检测出AI?揭秘「误检」背后的原因 - 我要发一区
  • 立知多模态重排序模型:解决内容检索排序难题
  • STEP3-VL-10B开箱即用体验:轻量级模型,媲美超大模型的视觉理解力
  • 2026广州农产品商标设计优质机构推荐榜:简约商标设计/餐饮logo设计/餐饮商标设计/高端logo设计/选择指南 - 优质品牌商家
  • Qwen3-0.6B-FP8优化升级:如何提升推理速度与降低资源占用
  • 网络安全渗透测试学习笔记-20260225
  • AI率10%、20%、30%分别是什么水平?一张图看懂AI率等级 - 我要发一区
  • Bidili SDXL Generator 开箱即用:纯本地运行,无需网络依赖的SDXL图片生成方案
  • 困惑度是什么?一文搞懂AIGC检测的核心指标 - 我要发一区
  • GLM-OCR效果深度评测:多场景文档解析准确率对比
  • Quantum Queen MT5 V2.6深度解析:AI驱动的黄金外汇量化交易新标杆
  • CentOS下LibreOffice文档转换PDF卡顿与乱码问题全解析
  • 成都旧房翻新|8大核心顾虑拆解,实用参考+价值解析 - 推荐官
  • USB-C与Thunderbolt终极指南:如何选择最适合你的接口
  • 成都半包装修避坑指南|里林设计:破解业主6大核心顾虑,半包也能省心又可控 - 推荐官
  • 快讯|汽车资本密集入局具身智能:上汽领投自变量、中科第五纪成宇树大脑供应商,产业逻辑正在重构
  • 2026年服务机器人应用技术员报考攻略
  • 基于需求导向的安宁照护服务与管理策略
  • 2026年家政保洁优质服务推荐指南:成都保洁/成都养老服务/成都养老院/成都家政保洁/成都钟点工保洁/成都高端家政/选择指南 - 优质品牌商家
  • 手把手教你看AIGC检测报告:每个指标都代表什么意思 - 我要发一区
  • 彩旗不止是装饰:解锁现代场景中彩旗的功能密码与选择智慧
  • AI时代,软件架构师的下一个风口:从架构设计到提示工程
  • 网络基础科普:IP地址是什么?MAC地址是什么?它们如何协同工作?
  • 破壁与重构:AI+低代码如何颠覆金融科技开发范式?