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