Skip to Content
面试题库Jvm[面试题] 什么是强引用、软引用、弱引用和虚引用?

[面试题] 什么是强引用、软引用、弱引用和虚引用?

📖 版块 A:知识讲解版 (温故知新)

  • 强引用(Strong Reference)

    1. 最常见的引用形式,比如 Object obj = new Object()
    2. 只要强引用还在,对象通常就不会被 GC 回收。
  • 软引用(Soft Reference)

    1. 内存充足时通常不会回收。
    2. 内存紧张时,会优先回收软引用关联的对象。
    3. 适合实现内存敏感型缓存。
  • 弱引用(Weak Reference)

    1. 比软引用更弱。
    2. 只要发生 GC,不管内存是否紧张,都可能被回收。
    3. 适合做弱键缓存、ThreadLocalMap 等场景的辅助设计。
  • 虚引用(Phantom Reference)

    1. 最弱的一种引用。
    2. 它本身不影响对象生命周期,也拿不到对象实例。
    3. 通常配合 ReferenceQueue 使用,用来跟踪对象即将被回收的时机。

🎤 版块 B:面试实战版 (高手逐字稿)

Q:什么是强引用、软引用、弱引用和虚引用?

💬 高手逐字稿

Java 的这四种引用,本质上是在表达:一个对象和 GC 之间,到底应该保持多强的存活关系。

最强的是强引用。这就是我们日常写代码时最常见的那种引用,只要强引用还指着一个对象,GC 通常就不会回收它。

接下来是软引用。软引用的意思可以理解成“这个对象我还想留着,但如果内存紧张了,你可以先回收它”。所以它特别适合做内存敏感型缓存。

再往下是弱引用。它比软引用更弱,只要发生 GC,不管当前内存紧不紧张,弱引用对象基本都有可能被清掉。所以它更适合那些“我只是临时挂一下,随时可以丢”的场景。

最弱的是虚引用。它和前面三种都不一样,因为它根本不是为了“继续用对象”而设计的。你拿着虚引用,是拿不到目标对象本身的,它通常必须配合 ReferenceQueue 一起用,主要目的是在对象真正被回收前后,感知这个时机,做一些资源清理或跟踪工作。

所以一句话总结:

  • 强引用:尽量别回收;
  • 软引用:内存不够再回收;
  • 弱引用:只要 GC 就可能回收;
  • 虚引用:不关心对象使用,只关心回收通知。
最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册