java中的SoftReference和WeakReference已经出来很久了,但是到现在为止开发的程序里几乎都没有直接用到它们。
用不到,那就说明还没有碰到需要用它们的场景,当然也有一个原因,就是不知道怎么用。
简单来说,java中的引用默认都是强引用,只要当引用存在(就是能从根引用遍历到),GC就不会回收。
有时候,我们无法自己决定还要不要用一个实例,可能需要根据情况决定,那么就有了SoftReference和WeakReference。
SoftReference:当jvm内存不够用的时候,由jvm决定是否回收
WeakReference:无条件回收。
对于SoftReference,我们很自然的就想到了一个应用,那就是cache,cache里的东西当然是存在的时间越长越好,但是毕竟有内存的限制,既然我们不知道什么时候内存不够用,那么就把控制权交个jvm,jvm觉得内存不够用了,那么就去清理一下SoftReference里的对象
对于WeakReference,只能想到一个应用场景,那就是,类A里引用了类B里的一个field实例,目的就是为了当类B以及其成员没被GC是,想在类A的方法里对这个field进行操作,如果已经GC了,那么就什么都不做。
比如:一个异步请求返回数据时,去更新页面A里的表格,就可以在请求类里保持一个对页面A里表格的一个WeakReference,如果在请求还未返回的时候,页面A已经关掉了的话,也不影响表格的释放。页面A没关掉的话,就可以直接更新了。
相关推荐
SoftReference、WeakReference和PhantomRefrence分析和比较
StrongReference,SoftReference, WeakReference的使用实例,请参照博客:http://blog.csdn.net/To_be_Designer/article/details/72673421
3.1 强引 3.2 软引 3.3 弱引 3. 4 假象引
周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了PhantomReference这玩意儿,得恶补基础啊),这三种都是弱引用,区别在于强度...
ava有四种引用类型,strongreference,softreference,weakreference,phantomreference。本篇文档主要的就是进阶的介绍和了解这四种引用类型的异同点,助于你对java的更好的学习理解
├─Google Guava 第29讲-SoftReference,WeakReference,PhantomReference精讲.wmv ├─Google Guava 第30讲-SoftReference加LRU算法实现InMemoryCache.wmv ├─Google Guava 第31讲-Guava之CacheLoader,...
网上关于四种引用长篇概论很多,不过大多是理论,看是看懂了可能就是一头雾水,下面我用很简单的代码帮助你加强理解和记忆。 前述:除了强引用外,其他引用不是我们所常见的 new出来的对象,而是需要借用3个类...
1.强引用1.强引用 2.软引用(SoftReference) 3.弱引用(WeakReference) 4.虚引用(PhantomReference) 等等;
该Demo主要原理: 加载图片时先查看缓存中时候存在该图片,如果存在则返回该图片,否则先加载载一个...并且处理的多个细节,包括使用WeakReference、SoftReference防止内存溢出、解决使用Handler时context泄露问题 登
很早Java API就添加了弱引用(WeakReference)和软引用(SoftReference),但并不是所有的程序员都熟悉这两个概念
他们分别是强引用(StrongReference),软引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虚引用),他们被 GC回收的可能性从小到大排列。 强引用(StrongReference) 只要强引用存在,垃圾回收器将...
180多页面试题,前前后后不间断的更新了两年,准备换工作时,总是拿来看看,有比较好的面试题,也不间断的更新,面试题目录如下: 【基础】面向对象的特征有哪些方面 13 抽象 13 继承 13 封装 13 多态性 13 【基础】...
•接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。 •接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。 接口与抽象类的区别 ...