没有想到有一天真的会用到SoftReference,学的时候完全不知道这东西能干吗。
今天它确实派上用场了,没错,我也是用它来做cache。
SoftReference的语义就是当内存不够用的时候,GC会回收SoftReference所引用的对象。所以,在memory sensitive的程序中将某些大型数据设置成SoftReference再合适不过了。
创建一个SoftReference:
最后那句“obj = null”很重要。如果不将obj设置成null,那么new出来的Object就会有一个"strong reference",如果这样,softRef就不能发挥作用了。
使用SoftReferene:
因为是SoftReference,所以有可能已经被GC回收了,所以需要判断sr.get()的返回值是否为null。如果是的话,就再重新new一个Object。这里的最后一行代码也很有讲究,比如,也许会这么写:
这样的问题就在于GC可能发生在"sr = new SoftReference(new Object());"和"obj2 = sr.get()"之间,那么obj2仍然有可能为null。
Reference:
http://www2.sys-con.com/itsg/virtualcd/java/archives/0507/shields/index.html
分享到:
相关推荐
SoftReference、WeakReference和PhantomRefrence分析和比较
StrongReference,SoftReference, WeakReference的使用实例,请参照博客:http://blog.csdn.net/To_be_Designer/article/details/72673421
软引用SoftReference1
通过软引用SoftReference缓存图片及实现图片的异步加载
本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下: Java中的SoftReference即对象的软引用。如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间...
网上关于这个方面的文章也不少,基本的思路是线程...先放上内存缓存类的代码MemoryCache.java: 代码如下: <SPAN xss=removed><STRONG>public class MemoryCache { private static final String TAG = “MemoryCache”;
3.1 强引 3.2 软引 3.3 弱引 3. 4 假象引
///mnt/sdcard/cache/bk.png.cache private Bitmap loadLocalCacheImage(String imagePath) { Bitmap bitmap = null; String cacheImagePath = getCacheImagePath(imagePath); File cacheFile = new File...
1. 用MemoryCache缓存图片信息,采用SoftReference方式避免OOM。 2. 将getView中需要加载的图片添加进堆栈,启动异步线程从栈顶开始加载图片,保证当前显示区域的图片被先显示。 3. 调整Load线程优先级为Thread.NORM...
内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且也把它划到缓存的层次结构中。当根据url向网络拉取图片的时候,先从内存中找,如果内存中...
实现图片缓存也不难,需要有相应的cache策略。这里我采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且也把它划到缓存的层次结构中
├─Google Guava 第01讲-Joiner详细介绍以及和Java8Collector对比.wmv ├─Google Guava 第02讲-Guava Splitter详细讲解以及实战练习...├─Google Guava 第34讲-Guava Cache之RecordStats,CacheBuilderSpec详解.wmv
解决android OOM的SoftReference
他可以用于实现一些常用资源的缓存,实现Cache的功能,保证大限度的使用内存而不引起OutOfMemory异常。 下面是软引用的实现代码: import java.lang.ref.SoftReference; public class softReference { /...
自定义缓存时,注意value要使用SoftReference包装,以便JVM回收 guava缓存:CacheBuilder、LoadingCache 1. 数据结构 1. string 2. list 3. hash 4. set 5. zset 6. stream(5.0新增) 2. 持久化 RDB AOF 方式...
在下载文件或者在线浏览文件时,或者为了保证文件下载的正确性,需要使用缓存机制,常使用SoftReference来实现。 SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程...
包括使用sqlite创建数据库 用来保存用户登录blog所需要的信息,SoftReference软引用,建立新线程下载图片,通过微博客户端获取账号列表,在此使用IF判断来处理:如果为空说明第一次使用跳到AuthorizeActivity页面...
先取内存数据,没有再从文件缓存中获取特点封装,继承其所有功能二级缓存内存缓存(采用SoftReference和LruCache,防止内存溢出)文件缓存(由ASimpleCache实现)默认使用SD卡缓存getCacheDir()获取的缓存文件较容易...