0%

强引用、软引用、弱引用、虚引用

文章字数:540,阅读全文大约需要2分钟

强引用

  1. 平常使用的Object a = new Object()就是强引用
  2. JVM内存不足时宁愿抛出OOM也不会随意回收存活的对象

软引用

  1. 通过SoftReference实现
  2. 只有内存不足时才会试图回收软引用指向的对象
  3. 如果软引用指向的对象被回收了,SoftReference对象就会被加入到ReferenceQueue队列中。使用poll()方法可以检查对象是否被回收,此方法返回队列前面的一个SoftReference对象
  4. 可以做缓存

    弱引用

  5. 通过WeakReference实现
  6. GC检查到只有弱引用指向的对象就会清除此对象(即不能维护调用链的存活判断)
  7. 同样可以和一个引用队列ReferenceQueue关联
  8. 应用:ThreadLocalkey就是弱引用,不会因为key有依赖导致对象不被GC

    虚引用

  9. 也叫幻想引用
  10. 使用PhantomReference实现
  11. 无法通过虚引用操作对象
  12. 仅能通过关联的ReferenceQueue知道对象是否被回收