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

2020-04-13  本文已影响0人  策马踏清风

强引用

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

软引用

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

弱引用

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

虚引用

  1. 也叫幻想引用
  2. 使用PhantomReference实现
  3. 无法通过虚引用操作对象
  4. 仅能通过关联的ReferenceQueue知道对象是否被回收
上一篇 下一篇

猜你喜欢

热点阅读