【面试干货】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💖点点关注,收藏不迷路💖 |

相关推荐
Dcs16 分钟前
VSCode等多款主流 IDE 爆出安全漏洞!插件“伪装认证”可执行恶意命令!
java
天涯学馆19 分钟前
网站秒变 App!手把手教你搞定 PWA
前端·javascript·面试
保持学习ing21 分钟前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
京东云开发者33 分钟前
Java的SPI机制详解
java
超级小忍1 小时前
服务端向客户端主动推送数据的几种方法(Spring Boot 环境)
java·spring boot·后端
程序无bug1 小时前
Spring IoC注解式开发无敌详细(细节丰富)
java·后端
小莫分享1 小时前
Java Lombok 入门
java
程序无bug1 小时前
Spring 对于事务上的应用的详细说明
java·后端
食亨技术团队1 小时前
被忽略的 SAAS 生命线:操作日志有多重要
java·后端
苦学编程的谢1 小时前
Maven
java·maven·intellij-idea