Java SoftReference
博客分类: Java
javasoftreference
SoftReference的语义就是当内存不够用的时候,GC会回收SoftReference所引用的对象。所以,在memory sensitive的程序中将某些大型数据设置成SoftReference再合适不过了。
创建一个SoftReference:
Java代码
Object obj = new Object();
SoftReference softRef = new SoftReference(obj);
obj = null;
最后那句“obj = null”很重要。如果不将obj设置成null,那么new出来的Object就会有一个"strong reference",如果这样,softRef就不能发挥作用了。
使用SoftReferene:
Java代码
Object obj2;
obj2 = sr.get();
if (obj2 == null) // GC freed this
sr = new SoftReference(obj2 = new Object());
因为是SoftReference,所以有可能已经被GC回收了,所以需要判断sr.get()的返回值是否为null。如果是的话,就再重新new一个Object。这里的最后一行代码也很有讲究,比如,也许会这么写:
Java代码
Object obj2;
obj2 = sr.get();
if (obj2 == null) {
sr = new SoftReference(new Object());
obj2 = sr.get();
}
这样的问题就在于GC可能发生在"sr = new SoftReference(new Object());"和"obj2 = sr.get()"之间,那么obj2仍然有可能为null。
分享到:
相关推荐
本篇文章将深入探讨如何使用Java中的软引用(SoftReference)来缓存图片,并结合异步加载策略来实现高效的图片加载机制。 一、软引用(SoftReference)的概念与作用 软引用是Java内存管理中的一种特性,它是一种弱...
强引用、弱引用、软引用和虚引用是四种不同的引用强度,它们在垃圾回收机制中扮演着不同的角色。了解这些引用类型对于优化内存使用、防止内存泄漏以及合理地控制对象生命周期至关重要。 1. **强引用(Strong ...
强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种特殊的引用类型,它们可以和 GC 做交互,以满足不同的应用场景。 SoftReference(软引用) 软引用是主要用于内存敏感的高速...
### Java中的软引用、弱引用和虚引用详解 #### 一、引言 在Java开发过程中,特别是Android应用开发中,经常会遇到一个普遍的问题——内存溢出(OutOfMemory Error,简称OOM)。这个问题往往与如何有效地管理内存...
Java从1.2版本开始引入了四种引用,分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这四种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用...
Java中的四种引用类型是Java内存管理的重要组成部分,它们分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。每种引用类型具有不同的特点和用途,...
当对象不再被软引用引用时,Java虚拟机会将该软引用加入到引用队列中,以便程序可以检测到对象已经被回收。 示例代码: ```java String str = new String("hello"); SoftReference<String> softRef = new ...
具体实现上,可以使用Java的`java.lang.ref.SoftReference`类来创建软引用。通常,我们会创建一个软引用对象,将实际的缓存数据作为参数传入,然后将软引用对象放入一个映射结构(如HashMap)中。当需要访问缓存时,...
为了更好地理解和控制对象的生命周期,Java提供了四种不同类型的引用:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)以及虚引用(Phantom Reference)。每种引用都有其特定的...
然而,为了更好地控制内存,Java提供了不同类型的引用:强引用、弱引用、软引用和虚引用。这些引用类型允许程序员在特定场景下干预垃圾收集过程,以达到更精细的内存管理。 1. **强引用(Strong Reference)** - *...
从JDK 1.2版本开始,Java引入了一种更为精细的引用类型管理机制,通过四种不同的引用类型:强引用、软引用、弱引用和虚引用,让开发者能够更加灵活地控制对象的生命周期。这种机制不仅提升了Java应用程序对内存使用...
从JDK1.2开始,Java引入了四种不同级别的引用,分别是强引用、软引用、弱引用和虚引用,每种引用类型都有其特定的用途和行为。 1. **强引用**:这是最常见的引用类型,如果一个对象被强引用,垃圾收集器永远不会...
Java提供了四种不同级别的引用类型:强引用、软引用、弱引用和虚引用(幻象引用),每种引用类型在内存管理中有不同的作用。 1. **强引用(Strong Reference)** - 强引用是最常见的引用类型,即通常的变量赋值。...
2. 使用软引用(SoftReference): 软引用与弱引用类似,但其强度稍大。软引用在系统内存不足时会被回收,而弱引用则是在垃圾回收器启动时就会被回收。使用软引用可以稍微延长对象的生命周期,但在内存紧张时依然能...
首先,软引用是Java提供的一个高级内存管理机制。软引用关联的对象在系统即将发生内存溢出之前会被回收。换句话说,软引用的对象只有在系统内存紧张时才会被垃圾收集器清除。这种特性使得软引用来存储一些非必需但...
2. **软引用(SoftReference)**: 软引用在内存充足时不会被回收,只有当内存不足时,垃圾回收器才会回收这些对象。软引用常用于实现内存敏感的高速缓存,例如,可以缓存不经常使用但又不希望立即销毁的数据。软引用...
JAVA 软引用是一种特殊的引用类型,它使用SoftReference类来创建。软引用是弱于强引用的,它们之间的主要区别在于垃圾回收器对它们的态度。强引用是垃圾回收器永远不会回收的,而软引用则是垃圾回收器在内存不足时才...
软引用用来描述一些还有用但是并非必须的对象,在 Java 中用 `java.lang.ref.SoftReference` 类来表示。对于软引用关联着的对象,只有在内存不足的时候 JVM 才会回收该对象。因此,这一点可以很好地用来解决 OOM 的...
软引用通过`java.lang.ref.SoftReference`类实现。当内存不足以满足新的分配需求时,JVM会清除所有软引用指向的对象,以避免系统崩溃。 然后是**弱引用(Weak Reference)**,它比软引用的生存期更短。弱引用通过`...