文章目录
  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