弱引用(WeakReference)是一种特殊的引用,它的存在不影响对象的回收。只要垃圾回收机制一运行,无论JVM的内存空间是否足够,都会回收被弱引用关联的对象。
弱引用的作用是:
- 允许对象在适当的时机被垃圾回收,避免内存泄漏。
- 当内存不足时,JVM会优先回收被弱引用关联的对象。
- 可以用来实现缓存,当内存不足时,缓存的对象可以被回收。
我们可以通过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已被回收
在该示例中:
- obj1作为弱引用ref1的关联对象。
- 设置obj1为null,使其成为垃圾。
- 显式调用GC,由于obj1只被弱引用关联,所以会被回收。
- 通过ref1.get()检查关联对象,发现已被回收,返回null。
所以,理解弱引用可以让我们在适当时机回收对象,防止内存泄漏。