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和PhantomReference分析和比较 在 Java 中,引用类型分为强引用、软引用、弱引用和虚引用四种。强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种...
StrongReference,SoftReference, WeakReference的使用实例,请参照博客:http://blog.csdn.net/To_be_Designer/article/details/72673421
Java从1.2版本开始引入了四种引用,分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这四种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用...
周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了PhantomReference这玩意儿,得恶补基础啊),这三种都是弱引用,区别在于强度...
本文将深入探讨这个包中的四种主要引用类型:StrongReference、SoftReference、WeakReference 和 PhantomReference,以及它们的特性、用法和作用。 首先,强引用(StrongReference)是我们在日常编程中最常见的引用...
3. 使用软引用或弱引用:通过SoftReference或WeakReference持有Bitmap对象,帮助垃圾回收器更好地管理内存。 总结,大位图的二次采样处理是Android开发中解决内存问题的关键技术。开发者需要理解其原理,掌握计算...
5. 使用WeakReference和SoftReference: WeakReference和SoftReference可以帮助开发者更好地管理应用程序中的对象生命周期。 OOM错误的常见解决方法 1. 使用System.gc():System.gc()可以强制垃圾回收器回收垃圾...
4. 使用WeakReference和SoftReference,WeakReference和SoftReference可以帮助避免内存泄漏。 Java的垃圾回收机制可以自动回收内存中的垃圾,避免内存泄漏,但是程序员需要注意避免内存泄漏的几点,以确保程序的...
总结,java.lang.ref 包中的四种引用类型——StrongReference、SoftReference、WeakReference 和 PhantomReference,提供了不同的内存管理策略,适应不同的场景需求。强引用是最常用的引用类型,但在处理大对象或...
- **数据类型选择**:选择合适的数据类型,如StringBuilder代替String进行字符串拼接,使用SoftReference和WeakReference利于内存回收,final类型提高读取效率。 - **数据结构选择**:根据需求选择合适的数据结构...
7. 使用WeakReference和SoftReference: 对于那些可能引起内存泄漏的引用,可以考虑使用WeakReference或SoftReference。WeakReference在对象无其他强引用时会立即被回收,而SoftReference在系统内存紧张时才会被...
4. WeakReference 与 SoftReference: WeakReference 和 SoftReference 都可以用于提高 GC 和内存的效率,但是 WeakReference 一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被回收,但是可以延迟到...
Java 中的弱引用(WeakReference)是一种特殊的引用类型,它可以帮助我们更好地管理内存和避免内存泄漏。在 Java 中,当一个对象被创建时,它被放在堆(Heap)中。当垃圾回收器(GC)运行时,如果发现没有任何引用...
另外,使用SoftReference或WeakReference来存储Bitmap,可以在内存紧张时自动释放内存。此外,使用内存池和复用策略可以降低内存分配和回收的开销。对于频繁加载和显示图片的场景,如瀑布流或网格布局,还可以利用...
Java提供了几种不同类型的引用,如SoftReference和WeakReference,来帮助管理对象的生命周期。SoftReference会在系统即将发生内存溢出之前才释放引用的对象,而WeakReference则会在GC发现对象不可达时立即释放。这些...
- **使用软引用和弱引用**:通过使用SoftReference和WeakReference,可以在内存不足时自动清除引用对象,防止内存泄漏。 - **LruCache**:Android提供的Least Recently Used缓存策略,用于缓存Bitmap或其他对象,...
- SoftReference和WeakReference:对于内存敏感的应用,可以使用这些引用类型来管理Bitmap对象,防止内存泄漏,但需要注意它们并不保证在内存不足时一定会释放。 - 使用池化技术:通过BitmapPool回收和重用Bitmap...
4. 载入Bitmap时使用SoftReference或WeakReference:这样在内存不足时,系统可以优先回收这些对象,降低OOM风险。 5. 使用内存和磁盘缓存:将图片保存到LRU Cache(最近最少使用)内存缓存和File Cache(文件缓存)...