强引用
- 平常使用的
Object a = new Object()
就是强引用 -
JVM
内存不足时宁愿抛出OOM
也不会随意回收存活的对象
软引用
- 通过
SoftReference
实现 - 只有内存不足时才会试图回收软引用指向的对象
- 如果软引用指向的对象被回收了,
SoftReference
对象就会被加入到ReferenceQueue
队列中。使用poll()
方法可以检查对象是否被回收,此方法返回队列前面的一个SoftReference
对象 - 可以做缓存
弱引用
- 通过
WeakReference
实现 -
GC
检查到只有弱引用指向的对象就会清除此对象(即不能维护调用链的存活判断) - 同样可以和一个引用队列
ReferenceQueue
关联 - 应用:
ThreadLocal
的key
就是弱引用,不会因为key
有依赖导致对象不被GC
虚引用
- 也叫幻想引用
- 使用
PhantomReference
实现 - 无法通过虚引用操作对象
- 仅能通过关联的
ReferenceQueue
知道对象是否被回收
网友评论