在JDK1.2后,java对引用的概念进行了扩充。按照引用强度依次从强到弱分为:强引用、软引用(SoftReference)、弱引用(WeakReference)、虚引用(PhantomReference)用四种。
强引用:最常见的,不会被GC回收的对象,如 Object obj = new Object();
弱引用:也是描述可有可无的对象,和软引用不同的是,它的生命周期更短,被软引用关联的对象一定只能生存在下一次垃圾回收收集之前,在GC的过程中,一旦发现有弱引用的对象,不管当前内存空间是否足够,都会回收它的内存。 真是因为这个特性,所以弱引用常用于Map数据结构中,引用占用空间内存较大的对象。通常用WeakReference类实现软引用。
虚引用:也称幽灵引用,作用的唯一目的就是:给一个对象设置虚引用就是为了能在这个对象被收集器回收时可以收到一个系统通知。当GC准备回收一个对象时,发现它还有虚引用,就会在回收前,把虚引用加入到引用队列中,程序可以通过判断队列中是否加入虚引用来判断被引用的对象是否将要GC回收,从而可以在finalize方法中采取措施。通常用PhantomReference类实现软引用。