`
cunzhangok
  • 浏览: 66300 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

java SoftReference 软引用

 
阅读更多
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。
分享到:
评论

相关推荐

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

    本篇文章将深入探讨如何使用Java中的软引用(SoftReference)来缓存图片,并结合异步加载策略来实现高效的图片加载机制。 一、软引用(SoftReference)的概念与作用 软引用是Java内存管理中的一种特性,它是一种弱...

    Java中弱引用软引用虚引用及强引用的区别Java开发Ja

    强引用、弱引用、软引用和虚引用是四种不同的引用强度,它们在垃圾回收机制中扮演着不同的角色。了解这些引用类型对于优化内存使用、防止内存泄漏以及合理地控制对象生命周期至关重要。 1. **强引用(Strong ...

    SoftReference、WeakReference和PhantomRefrence分析和比较

    强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种特殊的引用类型,它们可以和 GC 做交互,以满足不同的应用场景。 SoftReference(软引用) 软引用是主要用于内存敏感的高速...

    Java中的软引用弱引用和虚引用.docx

    ### Java中的软引用、弱引用和虚引用详解 #### 一、引言 在Java开发过程中,特别是Android应用开发中,经常会遇到一个普遍的问题——内存溢出(OutOfMemory Error,简称OOM)。这个问题往往与如何有效地管理内存...

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

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

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

    Java中的四种引用类型是Java内存管理的重要组成部分,它们分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。每种引用类型具有不同的特点和用途,...

    java 常见的四种引用

    当对象不再被软引用引用时,Java虚拟机会将该软引用加入到引用队列中,以便程序可以检测到对象已经被回收。 示例代码: ```java String str = new String("hello"); SoftReference<String> softRef = new ...

    基于软引用实现的缓存,当内存不够使会自动释放缓存内容,以避免OOM

    具体实现上,可以使用Java的`java.lang.ref.SoftReference`类来创建软引用。通常,我们会创建一个软引用对象,将实际的缓存数据作为参数传入,然后将软引用对象放入一个映射结构(如HashMap)中。当需要访问缓存时,...

    Java中的强软弱虚引用

    为了更好地理解和控制对象的生命周期,Java提供了四种不同类型的引用:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)以及虚引用(Phantom Reference)。每种引用都有其特定的...

    Java 7之基础 - 强引用、弱引用、软引用、虚引用1

    然而,为了更好地控制内存,Java提供了不同类型的引用:强引用、弱引用、软引用和虚引用。这些引用类型允许程序员在特定场景下干预垃圾收集过程,以达到更精细的内存管理。 1. **强引用(Strong Reference)** - *...

    Java的四种引用

    从JDK 1.2版本开始,Java引入了一种更为精细的引用类型管理机制,通过四种不同的引用类型:强引用、软引用、弱引用和虚引用,让开发者能够更加灵活地控制对象的生命周期。这种机制不仅提升了Java应用程序对内存使用...

    Java对象的引用.pdf

    从JDK1.2开始,Java引入了四种不同级别的引用,分别是强引用、软引用、弱引用和虚引用,每种引用类型都有其特定的用途和行为。 1. **强引用**:这是最常见的引用类型,如果一个对象被强引用,垃圾收集器永远不会...

    Java引用类型1

    Java提供了四种不同级别的引用类型:强引用、软引用、弱引用和虚引用(幻象引用),每种引用类型在内存管理中有不同的作用。 1. **强引用(Strong Reference)** - 强引用是最常见的引用类型,即通常的变量赋值。...

    如何解决Java的循环引用问题

    2. 使用软引用(SoftReference): 软引用与弱引用类似,但其强度稍大。软引用在系统内存不足时会被回收,而弱引用则是在垃圾回收器启动时就会被回收。使用软引用可以稍微延长对象的生命周期,但在内存紧张时依然能...

    Android中的软引用和弱引用

    首先,软引用是Java提供的一个高级内存管理机制。软引用关联的对象在系统即将发生内存溢出之前会被回收。换句话说,软引用的对象只有在系统内存紧张时才会被垃圾收集器清除。这种特性使得软引用来存储一些非必需但...

    Java对象的强、软、弱和虚引用1

    2. **软引用(SoftReference)**: 软引用在内存充足时不会被回收,只有当内存不足时,垃圾回收器才会回收这些对象。软引用常用于实现内存敏感的高速缓存,例如,可以缓存不经常使用但又不希望立即销毁的数据。软引用...

    深入了解JAVA 软引用

    JAVA 软引用是一种特殊的引用类型,它使用SoftReference类来创建。软引用是弱于强引用的,它们之间的主要区别在于垃圾回收器对它们的态度。强引用是垃圾回收器永远不会回收的,而软引用则是垃圾回收器在内存不足时才...

    Java中强引用,软引用,弱引用概念解析

    软引用用来描述一些还有用但是并非必须的对象,在 Java 中用 `java.lang.ref.SoftReference` 类来表示。对于软引用关联着的对象,只有在内存不足的时候 JVM 才会回收该对象。因此,这一点可以很好地用来解决 OOM 的...

    java引用的demo

    软引用通过`java.lang.ref.SoftReference`类实现。当内存不足以满足新的分配需求时,JVM会清除所有软引用指向的对象,以避免系统崩溃。 然后是**弱引用(Weak Reference)**,它比软引用的生存期更短。弱引用通过`...

Global site tag (gtag.js) - Google Analytics