在JDK1.2之后,Java对引用进行了扩充,将引用分为强引用、软引用、弱引用和虚引用,这4中引用的强度依次减弱,这里说的引用强度是指引用关联的对象在发生垃圾回收之后是否还存在,具体如下:
强引用类似“Hello hello = new Hello()”这种引用,只要引用还存在,被引用的对象将永远不会被垃圾回收器回收;
软引用用来关联一些可以存活但并非一定要存活的对象,这些被关联的对象在将要发生内存溢出异常之前被列入回收范围等待第二次回收,如果这次回收还没有足够的内存空间才会抛出内存溢出异常。在JDK1.2之后的版本中,提供了SoftReference类来实现软引用;
弱引用关联的对象,在垃圾回收器工作时,无论当前内存空间是否够用,都会被回收掉。在JDK1.2之后的版本中,提供了WeakReference类来实现弱引用;
虚引用被称为幽灵引用或幻影引用。一个对象是否有虚引用的存在,完全不会对其生命周期构成任何影响,也无法通过虚引用来取得一个对象实例,使用虚引用的唯一目的是在对象被回收的时候收到一个系统通知。在JDK1.2之后的版本中,提供了PhantomReference来实现虚引用。