强引用

强引用就是类似Object obj = new Object();之类的,只要有强引用存在,垃圾收集器就不会回收引用对象。

软引用

被软引用引用的对象,当系统将要内存不足时,被软引用引用的对象就将被回收,JDK提供了SoftReference类来实现软引用。软引用对象最常用于实现内存敏感的缓存。
一个代码例子:

import java.lang.ref.SoftReference;

public class SoftReferenceTest {

    public static void main(String[] args) {
        String msg = "hello world!";//强引用
        SoftReference<String> softMsg = new SoftReference<String>("hello world");//软引用
        System.out.println(msg);
        System.out.println(softMsg.get());
    }
}

弱引用

如果一个对象只有弱引用引用的话,将会被垃圾回收。JDK提供了WeakReference来实现弱引用。WeakHashMap也是弱引用的一个例子。

虚引用

最弱的一种引用,无法通过虚引用得到实例,一个对象是否有虚引用存在,完全不会对其生存时间构成影响。JDK提供PhantomReference类来实现虚引用。虚引用存在的唯一作用就是当它指向的对象被回收后,虚引用本身会被加入到引用队列中,用作记录它指向的对象已被销毁。

其他参考

http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=502634028&idx=1&sn=29890f04d6d27764a4dc7698ce0ccdce#rd