`
dolaameng328
  • 浏览: 30281 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android 内存优化的两个类:SoftReference 和 WeakReference

 
阅读更多

如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集的执行清除,你必须要用一个 reference 记住此对象,以便随时观察,但是却因此造成此对象的 reference 数目一直无法为零, 使得对象无法被清除。

java.lang.ref.WeakReference

 不过,现在有了 Weak Reference 之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那么你应该用 Weak Reference 来记住此对象,而不是用一般的 reference。

   A obj = new A(); 

  WeakReference wr = new WeakReference(obj); 

  obj = null; 

  //等待一段时间,obj对象就会被垃圾回收
... 

if (wr.get()==null) { 
System.out.println("obj 已经被清除了 "); 
} else { 
System.out.println("obj 尚未被清除,其信息是 "+obj.toString());
}
... 

 在此例中,透过 get() 可以取得此 Reference 的所指到的对象,如果传出值为 null 的话,代表此对象已经被清除。

  这类的技巧,在设计 Optimizer 或 Debugger 这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以 影响此对象的垃圾收集。

  java.lang.ref.SoftReference

  Soft Reference 虽然和 Weak Reference 很类似,但是用途却不同。 被 Soft Reference 指到的对象,即使没有任何 Direct Reference,也不会被清除。一直要到 JVM 内存不足时且 没有 Direct Reference 时才会清除,SoftReference 是用来设计 object-cache 之用的。如此一来 SoftReference 不但可以把对象 cache 起来,也不会造成内存不足的错误 (OutOfMemoryError)。我觉得 Soft Reference 也适合拿来实作 pooling 的技巧。

 A obj = new A(); 

SoftRefenrence sr = new SoftReference(obj); 

引用时 

if(sr!=null){ 

    obj = sr.get(); 

}else{ 

    obj = new A(); 

    sr = new SoftReference(obj); 

} 

 文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20090502/166222.html

分享到:
评论

相关推荐

    SoftReference、WeakReference和PhantomRefrence分析和比较

    SoftReference、WeakReference和PhantomRefrence分析和比较

    StrongReference,SoftReference, WeakReference的使用实例

    StrongReference,SoftReference, WeakReference的使用实例,请参照博客:http://blog.csdn.net/To_be_Designer/article/details/72673421

    Java引用总结--StrongReference、SoftReference、WeakReference、PhantomRef

    3.1 强引 3.2 软引 3.3 弱引 3. 4 假象引

    Android基于SoftReference缓存图片的方法

    本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下: Java中的SoftReference即对象的软引用。如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间...

    CacheManage::fire:android缓存管理器,分为内存缓存和文件缓存两种 先取内存数据,没有再从文件缓存中取

    android缓存管理器,分为两级缓存:内存缓存和文件缓存;先取内存数据,没有再从文件缓存中获取特点封装,继承其所有功能二级缓存内存缓存(采用SoftReference和LruCache,防止内存溢出)文件缓存(由ASimpleCache...

    Android内存管理

    Android的内存管理-SoftReference的使用、Android垃圾回收实质内容解析、如何避免Android内存泄露等

    redis基础.rar

    周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了PhantomReference这玩意儿,得恶补基础啊),这三种都是弱引用,区别在于强度...

    android 网络图片双缓存

    将内存再分两层缓存 强引用缓存不会轻易被回收,来保存常用数据,不常用的资源放入软引用缓存中。 对于硬引用和软引用的介绍: ⑴强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用...

    软引用SoftReference1

    软引用SoftReference1

    Android中加载网络资源时的优化可使用(线程+缓存)解决

    下面提出一些优化: 1、采用线程池 2、内存缓存+文件缓存 3、内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4、对下载的图片进行按比例缩放,以减少内存的消耗 具体的...

    拓胜技术专家教你如何深入理解Java四种引用类型

    ava有四种引用类型,strongreference,softreference,weakreference,phantomreference。本篇文档主要的就是进阶的介绍和了解这四种引用类型的异同点,助于你对java的更好的学习理解

    android中软引用的使用测试

    在android程序开发过程中,可能会有很多人会和我一样,因为内存溢出而感觉到苦恼,因为本身引用是个很多很多(基本就是个看网络美女图片的软件,哈哈),大家都知道android对于每个应用分配的内存是有限制的,不同机型...

    Android开发之超强图片工具类BitmapUtil完整实例

    本文实例讲述了Android开发之超强图片工具类BitmapUtil。分享给大家供大家参考,具体如下: 说明:为了方便大家使用,本人把大家常用的图片处理代码集中到这个类里 使用了LruCache与SoftReference /** * 图片加载...

    软引用SoftReference缓存图片及异步加载

    通过软引用SoftReference缓存图片及实现图片的异步加载

    Android新浪微博客户端源代码

    Android手机上的新浪微博客户端...如果不为空读取这些记录的UserID号、Access Token、Access Secret值,然后根据这3个值调用新浪的api接口获取这些记录对应的用户昵称和用户头像图标等信息。  请下载完整的源码参阅。

    android gridview/listview加载大量图片

    listview/gridview加载显示大量图片,对内存和性能都是严峻的考验。常引起OOM,滚动卡顿等问题。该示例代码完美解决了上述问题。主要用到的技术有: 1. 用MemoryCache缓存图片信息,采用SoftReference方式避免OOM。 ...

    Android异步加载图片Demo

    该Demo主要原理: 加载图片时先查看缓存中时候存在该图片,如果存在则返回该图片,否则先加载载一个...并且处理的多个细节,包括使用WeakReference、SoftReference防止内存溢出、解决使用Handler时context泄露问题 登

    Android图片加载的缓存类

    本文为大家分享了Android图片加载的缓存类,供大家参考,具体内容如下 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ...

Global site tag (gtag.js) - Google Analytics