强引用、软引用、弱引用、虚引用

2016/1/24 posted in  Java

强引用 StrongReference

只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象

若需要 jvm 回收此对象,可以将对象复制为 null

Object o = new Object();   //  强引用  
o = null;     // 帮助垃圾收集器回收此对象  

但是如果这个o是全局的变量时,就需要在不用这个对象时赋值为null,因为强引用不会被垃圾回收。

软引用 SoftReference

对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。

因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。

弱引用 WeakReference

当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象

虚引用 PhantomReference

如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。

参考

http://www.cnblogs.com/dolphin0520/p/3784171.html
http://blog.csdn.net/mazhimazh/article/details/19752475