`
zhanhao
  • 浏览: 287204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】SoftReference 和 WeakReference

阅读更多

Java 和 Android 内存优化的两个类:SoftReference 和 WeakReference
Posted on 2010-10-22 00:55 charley_yang 阅读(436) 评论(0) 编辑 收藏 
如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集的执行绪清除,你必须要用一个 reference 记住此对象,以便随时观察,但是却因此造成此对象的 reference 数目一直无法为零, 使得对象无法被清除。
view sourceprint?
1 java.lang.ref.WeakReference
  不过,现在有了 Weak Reference 之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那么你应该用 Weak Reference 来记住此对象,而不是用一般的 reference。
view sourceprint?
01      A obj = new A(); 
02  
03     WeakReference wr = new WeakReference(obj); 
04  
05     obj = null; 
06  
07     //等待一段时间,obj对象就会被垃圾回收
08   ... 
09  
10   if (wr.get()==null) { 
11   System.out.println("obj 已经被清除了 "); 
12   } else { 
13   System.out.println("obj 尚未被清除,其信息是 "+obj.toString());
14   }
15   ...
  在此例中,透过 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 的技巧。
view sourceprint?
01 A obj = new A(); 
02 
03 SoftRefenrence sr = new SoftReference(obj); 
04 
05 引用时 
06 
07 if(sr!=null){ 
08 
09     obj = sr.get(); 
10 
11 }else{ 
12 
13     obj = new A(); 
14 
15     sr = new SoftReference(obj); 
16 
17 }

 

分享到:
评论

相关推荐

    SoftReference、WeakReference和PhantomRefrence分析和比较

    SoftReference、WeakReference和PhantomReference分析和比较 在 Java 中,引用类型分为强引用、软引用、弱引用和虚引用四种。强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种...

    StrongReference,SoftReference, WeakReference的使用实例

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

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

    Java从1.2版本开始引入了四种引用,分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这四种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用...

    redis基础.rar

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

    深入探讨 java.lang.ref 包1

    本文将深入探讨这个包中的四种主要引用类型:StrongReference、SoftReference、WeakReference 和 PhantomReference,以及它们的特性、用法和作用。 首先,强引用(StrongReference)是我们在日常编程中最常见的引用...

    00M原因以及分析处理

    5. 使用WeakReference和SoftReference: WeakReference和SoftReference可以帮助开发者更好地管理应用程序中的对象生命周期。 OOM错误的常见解决方法 1. 使用System.gc():System.gc()可以强制垃圾回收器回收垃圾...

    android大位图二次采样处理三

    3. 使用软引用或弱引用:通过SoftReference或WeakReference持有Bitmap对象,帮助垃圾回收器更好地管理内存。 总结,大位图的二次采样处理是Android开发中解决内存问题的关键技术。开发者需要理解其原理,掌握计算...

    Java中内存泄露及垃圾回收机制参照.pdf

    4. 使用WeakReference和SoftReference,WeakReference和SoftReference可以帮助避免内存泄漏。 Java的垃圾回收机制可以自动回收内存中的垃圾,避免内存泄漏,但是程序员需要注意避免内存泄漏的几点,以确保程序的...

    Android应用开发中ListView组件性能优化的研究.pdf

    - **数据类型选择**:选择合适的数据类型,如StringBuilder代替String进行字符串拼接,使用SoftReference和WeakReference利于内存回收,final类型提高读取效率。 - **数据结构选择**:根据需求选择合适的数据结构...

    深入探讨 java-lang-ref 包.docx

    总结,java.lang.ref 包中的四种引用类型——StrongReference、SoftReference、WeakReference 和 PhantomReference,提供了不同的内存管理策略,适应不同的场景需求。强引用是最常用的引用类型,但在处理大对象或...

    博客 工作中遇到的Android内存优化问题demo

    7. 使用WeakReference和SoftReference: 对于那些可能引起内存泄漏的引用,可以考虑使用WeakReference或SoftReference。WeakReference在对象无其他强引用时会立即被回收,而SoftReference在系统内存紧张时才会被...

    JVM 77 道面试题及答案.docx

    4. WeakReference 与 SoftReference: WeakReference 和 SoftReference 都可以用于提高 GC 和内存的效率,但是 WeakReference 一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被回收,但是可以延迟到...

    Android 图片浏览器

    - SoftReference和WeakReference:对于内存敏感的应用,可以使用这些引用类型来管理Bitmap对象,防止内存泄漏,但需要注意它们并不保证在内存不足时一定会释放。 - 使用池化技术:通过BitmapPool回收和重用Bitmap...

    视频图片处理

    另外,使用SoftReference或WeakReference来存储Bitmap,可以在内存紧张时自动释放内存。此外,使用内存池和复用策略可以降低内存分配和回收的开销。对于频繁加载和显示图片的场景,如瀑布流或网格布局,还可以利用...

    Android例子源码仿oom的三例瀑布流源码

    - **使用软引用和弱引用**:通过使用SoftReference和WeakReference,可以在内存不足时自动清除引用对象,防止内存泄漏。 - **LruCache**:Android提供的Least Recently Used缓存策略,用于缓存Bitmap或其他对象,...

    Android下的图片压缩及图片和视频的上传

    使用SoftReference或WeakReference存储Bitmap。 4. **进度显示**:提供上传进度反馈,提高用户体验。 5. **权限管理**:确保应用拥有访问文件和网络的权限。 通过以上步骤,开发者可以在Android应用中实现图片和...

    java虚拟机垃圾回收详解.docx

    Java提供了几种不同类型的引用,如SoftReference和WeakReference,来帮助管理对象的生命周期。SoftReference会在系统即将发生内存溢出之前才释放引用的对象,而WeakReference则会在GC发现对象不可达时立即释放。这些...

    图片下载以及内存处理防OOM.zip

    4. 载入Bitmap时使用SoftReference或WeakReference:这样在内存不足时,系统可以优先回收这些对象,降低OOM风险。 5. 使用内存和磁盘缓存:将图片保存到LRU Cache(最近最少使用)内存缓存和File Cache(文件缓存)...

Global site tag (gtag.js) - Google Analytics