如果你想写一个 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分析和比较
StrongReference,SoftReference, WeakReference的使用实例,请参照博客:http://blog.csdn.net/To_be_Designer/article/details/72673421
3.1 强引 3.2 软引 3.3 弱引 3. 4 假象引
本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下: Java中的SoftReference即对象的软引用。如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间...
android缓存管理器,分为两级缓存:内存缓存和文件缓存;先取内存数据,没有再从文件缓存中获取特点封装,继承其所有功能二级缓存内存缓存(采用SoftReference和LruCache,防止内存溢出)文件缓存(由ASimpleCache...
Android的内存管理-SoftReference的使用、Android垃圾回收实质内容解析、如何避免Android内存泄露等
周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了PhantomReference这玩意儿,得恶补基础啊),这三种都是弱引用,区别在于强度...
将内存再分两层缓存 强引用缓存不会轻易被回收,来保存常用数据,不常用的资源放入软引用缓存中。 对于硬引用和软引用的介绍: ⑴强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用...
软引用SoftReference1
下面提出一些优化: 1、采用线程池 2、内存缓存+文件缓存 3、内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4、对下载的图片进行按比例缩放,以减少内存的消耗 具体的...
ava有四种引用类型,strongreference,softreference,weakreference,phantomreference。本篇文档主要的就是进阶的介绍和了解这四种引用类型的异同点,助于你对java的更好的学习理解
在android程序开发过程中,可能会有很多人会和我一样,因为内存溢出而感觉到苦恼,因为本身引用是个很多很多(基本就是个看网络美女图片的软件,哈哈),大家都知道android对于每个应用分配的内存是有限制的,不同机型...
本文实例讲述了Android开发之超强图片工具类BitmapUtil。分享给大家供大家参考,具体如下: 说明:为了方便大家使用,本人把大家常用的图片处理代码集中到这个类里 使用了LruCache与SoftReference /** * 图片加载...
通过软引用SoftReference缓存图片及实现图片的异步加载
Android手机上的新浪微博客户端...如果不为空读取这些记录的UserID号、Access Token、Access Secret值,然后根据这3个值调用新浪的api接口获取这些记录对应的用户昵称和用户头像图标等信息。 请下载完整的源码参阅。
listview/gridview加载显示大量图片,对内存和性能都是严峻的考验。常引起OOM,滚动卡顿等问题。该示例代码完美解决了上述问题。主要用到的技术有: 1. 用MemoryCache缓存图片信息,采用SoftReference方式避免OOM。 ...
该Demo主要原理: 加载图片时先查看缓存中时候存在该图片,如果存在则返回该图片,否则先加载载一个...并且处理的多个细节,包括使用WeakReference、SoftReference防止内存溢出、解决使用Handler时context泄露问题 登
本文为大家分享了Android图片加载的缓存类,供大家参考,具体内容如下 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ...