【面试干货】Java中的四种引用类型:强引用、软引用、弱引用和虚引用

【面试干货】Java中的四种引用类型:强引用、软引用、弱引用和虚引用

  • [1、强引用(Strong Reference)](#1、强引用(Strong Reference))
  • [2、软引用(Soft Reference)](#2、软引用(Soft Reference))
  • [3、弱引用(Weak Reference)](#3、弱引用(Weak Reference))
  • [4、虚引用(Phantom Reference)](#4、虚引用(Phantom Reference))
  • 5、总结

|-----------------------------|
| 💖The Begin💖点点关注,收藏不迷路💖 |

在Java中,除了我们常见的强引用(Strong Reference)外,还有三种引用类型:软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。它们都是Java对象引用关系中的一部分,每种引用类型在Java内存管理和垃圾回收中都扮演着不同的角色。

1、强引用(Strong Reference)

强引用 是Java中最普遍的一种引用方式。当一个对象具有强引用时,垃圾回收器永远不会回收它,即使内存空间不足。这种引用方式保证了对象在生命周期内的稳定性。

示例代码:

java 复制代码
String s = new String("abc"); // s是"abc"对象的强引用

2、软引用(Soft Reference)

软引用 用于描述还有用但非必须的对象。在内存足够的情况下,软引用的对象不会被回收;但当内存不足时,软引用的对象会被垃圾回收器回收。软引用通常用于实现内存敏感的高速缓存。

示例代码:

java 复制代码
SoftReference<String> softRef = new SoftReference<>(new String("abc")); // softRef是"abc"对象的软引用

软引用可以和引用队列(ReferenceQueue)联合使用,当软引用的对象被垃圾回收时,JVM会将这个软引用加入到与之关联的引用队列中。

3、弱引用(Weak Reference)

弱引用 与软引用类似,但具有更短的生命周期。当垃圾回收器扫描到只持有弱引用的对象时,无论当前内存是否足够,都会回收该对象的内存。弱引用通常用于实现一些不影响应用程序正常运行的缓存。

示例代码:

java 复制代码
WeakReference<String> weakRef = new WeakReference<>(new String("abc")); // weakRef是"abc"对象的弱引用

4、虚引用(Phantom Reference)

虚引用 是所有引用类型中最"弱"的一种。一个对象只持有虚引用时,它几乎与没有任何引用一样,随时可能被垃圾回收器回收。虚引用主要用于跟踪对象被垃圾回收器的活动,通常与引用队列(ReferenceQueue)一起使用。

示例代码:

java 复制代码
PhantomReference<String> phantomRef = new PhantomReference<>(new String("abc"), referenceQueue); // phantomRef是"abc"对象的虚引用

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

5、总结

1、强引用:最常见的引用类型,垃圾回收器不会回收强引用的对象。

2、软引用:用于描述非必须但有用的对象,内存不足时会被回收。

3、弱引用:比软引用更"弱"的引用类型,无论内存是否足够,垃圾回收器都会回收弱引用的对象。

4、虚引用:最"弱"的引用类型,用于跟踪对象被垃圾回收器的活动,必须和引用队列一起使用。

|---------------------------|
| 💖The End💖点点关注,收藏不迷路💖 |

相关推荐
沉默王二21 分钟前
腾讯一面,我霸气反问:“你说你们在做Agent项目,说说 SubAgent、Plan 模式、Skill 调用这些你们都是怎么做的?”面试官一直在擦汗。。
面试·agent·ai编程
爱笑的源码基地33 分钟前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
白露与泡影2 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
莫逸风3 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
z123456789864 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序员Rock4 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机
yaoxin5211234 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
做个文艺程序员5 小时前
Linux第24篇:Java应用监控体系搭建:Prometheus+Grafana可视化运维
java·grafana·prometheus
Ai_easygo5 小时前
MCP 协议实战:用 Claude Desktop 连本地 SQLite,5 分钟搭一个能查数据的 AI 助手
jvm·人工智能·sqlite
小钻风33665 小时前
Spring Boot 文件上传详解:深入理解 MultipartFile 的使用与原理
java·开发语言