什么是软引用?它的作用是什么?代码举例讲解

软引用(SoftReference)是一种比弱引用生存期更长的引用。只有当JVM进行垃圾回收时,空间不足时,才会回收被软引用关联的对象。

软引用的作用是:

  1. 允许对象在出发垃圾回收时被回收,主要用于内存敏感的程序中,整体提高程序性能。
  2. 软引用常用于实现内存敏感的高速缓存。长期不使用的缓存对象会被回收。
  3. 当堆空间不足时,会把软引用关联的对象列为回收候选,优先回收软引用关联的对象。

我们可以通过java.lang.ref.SoftReference类来实现软引用。构造方法为:

SoftReference(T referent) 

其中T是指向对象的类型。我们还需要关注其中的get()方法来获取软引用关联的对象。

来看一个简单示例:

public class SoftRefDemo {
    public static void main(String[] args) {
        Object obj1 = new Object();
        SoftReference<Object> ref1 = new SoftReference<>(obj1);

        obj1 = null;   // obj1可被回收

        System.gc();  // 显式调用GC,obj1不会被回收

        if(ref1.get() != null) {  
            System.out.println("obj1未被回收"); 
        }
    }
}

执行结果为:

obj1未被回收 

在该示例中:

  1. obj1作为软引用ref1的关联对象。
  2. 设置obj1为null,使其成为垃圾。
  3. 显式调用GC,由于还有足够的内存,obj1不会被回收。
  4. 通过ref1.get()检查关联对象,发现未被回收,返回非null值。