文章目录
  1. 1. StrongReference
  2. 2. SoftReference
  3. 3. WeakReference
  4. 4. PhantomReference

JDK 1.2版本引入了强、软、弱、虚引用的概念

StrongReference

  • 修饰的对象,JVM宁愿抛出OOM也不回收对象

SoftReference

  • 内存不足时,才会回收对象

WeakReference

  • 无论内容是否足够,垃圾回收扫描到,他就会被回收
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @Test  
    public void weakReference() {
    Object referent = new Object();
    WeakReference<Object> weakRerference = new WeakReference<Object>(referent);

    assertSame(referent, weakRerference.get());

    referent = null;
    System.gc();

    /**
    * 一旦没有指向 referent 的强引用, weak reference 在 GC 后会被自动回收
    */
    assertNull(weakRerference.get());
    }

PhantomReference

  • 相对于完全没有引用
文章目录
  1. 1. StrongReference
  2. 2. SoftReference
  3. 3. WeakReference
  4. 4. PhantomReference