关于java的引用类型的说明:
四种引用类型:
JDK1.2之前,一个对象只有“已被引用”和“未被引用”两种状态。无法描述特殊情况下的对象,比如,当内存充足是需要保留,而内存不足需要抛弃的对象。
所以在JDK1.2之后,将引用分为了:强引用、软引用、弱引用、虚引用。这四个引用强度逐渐减弱。
-
强引用:
new Object = new Object();
只要强引用存在,垃圾回收机器将不会回收引用的对象,哪怕内存不足,JVM也只会直接抛出OutOfMemoryError异常,断开对象与引用之间的关系,只需要将对象置为null即可,然后垃圾回收器就会在适时的情况下去回收无引用对象。
-
软引用:
软引用是描述一些非必须而仍然有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,若果在回收了软引用对象之后仍然内存不足的情况下,才会抛出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等等。JDK1.2之后,使用SoftReference类来表示软引用。
-
弱引用:
次引用强度更弱,无论内存是否足够,只要JVM进行垃圾回收,那些被软引用关联的对象都会被回收。在JDK1.2之后,使用WeakReference 类来表示若引用。
-
虚引用:
虚引用是一种最弱的引用关系,如果一个对象持有虚引用,那他就和没有任何引用一样,可能会被随时回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用