Java从1.2开始就有个不同引用的概念,废话不多说,直接上!
-
强引用(StrongReference)
-
软引用(SoftReference)
-
弱引用(WeakReference)
-
虚引用(PhantomReference)
强引用(StrongReference)
在1.2之前,只有强引用,这种引用,简单来说就一个字,强!
没有具体的类来标识强引用,我们正常使用的变量,都是强引用!
GC(垃圾回收器)不会去回收强引用;当内存空间不足时,JVM宁愿抛出OOM(OutOfMemry)的错误使程序终止,都不会轻易回收强引用对象!
软引用(SoftReference)
当内存空间够的时候,软引用和强引用没啥区别,也是一条汉子!
BUT,当内存空间不够的时候,他就怂了,JVM会把软引用的回收,以避免OOM的产生!
弱引用(WeakReference)
弱引用是真的弱,比起软引用只有在内存不足的时候才会被回收来说,弱引用是每次GC的时候一旦被发现有他的存在就直接被回收了,不管内存够不够,反正你弱,就是要把你干掉!
虚引用(PhantomReference)
形同虚设的一种引用!
听起来似乎很假,其实是真的。如果一个对象是虚引用,那就和没有引用没啥区别!
对!和没有引用没啥去别,完全不应用对象的生命周期!就是这么虚!
Execuse me,那这玩意儿有啥用??!
这个就要提一个很好用的东西,叫做:引用队列(ReferenceQueue)
引用队列(ReferenceQueue)
对象被垃圾回收,JVM就是这个引用加入到与之关联的引用队列中。