SoftReference vs WeakReference vs PhantomReference

这三类Reference按照引用强度依次是
Soft(软引用) > Weak(弱引用) > Phantom(虚引用)
一个对象只有软引用,则垃圾回收器会在内存不足的时候才回收它
一个对象只有弱引用,则无论内存是否不足,垃圾回收器扫描到它的时候都会回收它
一个对象只有虚引用,则生命周期等同于没有任何引用,垃圾回收器在任何时候都可能回收它,虚引用往往是用来跟踪垃圾回收器的回收活动
这三类引用在构造的时候都可以传入一个ReferenceQueue(虚引用则是必须传入一个ReferenceQueue),区别在于软引用和弱引用本身是在所引用的对象被释放后才会被放入ReferenceQueue, 而虚引用本身是在所引用的对象即将被释放之前就被放入ReferenceQueue, 所以我们可以监控这个ReferenceQueue, 在对象被释放之前做一些操作。

参考阅读

利用WeakReference和ReferenceQueue实现弱引用缓存
Java虚引用的作用

你可能感兴趣的:(SoftReference vs WeakReference vs PhantomReference)