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

参考来源:http://www.cnblogs.com/dolphin0520/p/3784171.html  感谢原作者的分享!!!

以下内容是本人在看完之后按照自己的理解复述的,仅作为学习记录,欲知详解请点击上面的网址。

1.强引用

示例:Object object=new Object();

只要某个对象与强引用相关联,JVM必定不会回收该对象,即使在内存不足的情况下,JVM宁愿跑出 Out Of Memory错误也不会回收该对象。值得注意的是:在函数中,有强引用和某个局部对象相关联,当函数运行完后,局部对象都不存在了,所以对象会被JVM回收。如果想中断强引用和某个对象之间的关联,可以将引用赋值为null,这样JVM会在合适的时间回收该对象。

2.软引用

示例:SoftReference<String> sr=new SoftReference <String>(new String("hello"));

对于软引用关联的对象,JVM会在内存不足时回收该对象。这个特性适合用来实现缓存:网页缓存、图片缓存等。

3.弱引用

示例:WeakReference<String> sr=new WeakReference<String>(new String("hello"));

当JVM进行垃圾回收时,无论内存是否充足,都会回收和弱引用相关联的对象。要值得注意的是:这里所说的被弱引用相关联的对象是指只有弱引用与之关联,如果存在强引用与之关联,则进行垃圾回收也不会回收该对象。(软引用+1)

弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收的垃圾,可以通过弱引用的isEnQueued方法返回对象是否被垃圾回收器标记。

4.虚引用

示例:ReferenceQueue<String> queue = new ReferenceQueue<String>();

PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);

虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。

虚引用主要用于检测对象是否已经从内存中删除。

5.使用软引用实现图片缓存

参考来源:https://blog.csdn.net/arui319/article/details/8489451  感谢原作者的分享!!!

猜你喜欢

转载自blog.csdn.net/Cary_1029/article/details/84386780