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

弱引用(WeakReference)是一种特殊的引用,它的存在不影响对象的回收。只要垃圾回收机制一运行,无论JVM的内存空间是否足够,都会回收被弱引用关联的对象。

弱引用的作用是:

  1. 允许对象在适当的时机被垃圾回收,避免内存泄漏。
  2. 当内存不足时,JVM会优先回收被弱引用关联的对象。
  3. 可以用来实现缓存,当内存不足时,缓存的对象可以被回收。

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

WeakReference(T referent)

其中T是指向对象的类型。我们还需要关注其中的get()方法来获取弱引用关联的对象,以及其中的clear()方法来清除弱引用。

来看一个简单示例:

public class WeakRefDemo {
    public static void main(String[] args) {
        Object obj1 = new Object();
        WeakReference<Object> ref1 = new WeakReference<>(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。

所以,理解弱引用可以让我们在适当时机回收对象,防止内存泄漏。