SoftReference的语义就是当内存不够用的时候,GC会回收SoftReference所引用的对象。所以,在memory sensitive的程序中将某些大型数据设置成SoftReference再合适不过了。
创建一个SoftReference:
Object obj = new Object();
SoftReference softRef = new SoftReference(obj);
obj = null;
最后那句“obj = null”很重要。如果不将obj设置成null,那么new出来的Object就会有一个"strong reference",如果这样,softRef就不能发挥作用了。
使用SoftReferene:
Object obj2;
obj2 = sr.get();
if (obj2 == null) // GC freed this
sr = new SoftReference(obj2 = new Object());
因为是SoftReference,所以有可能已经被GC回收了,所以需要判断sr.get()的返回值是否为null。如果是的话,就再重新new一个Object。这里的最后一行代码也很有讲究,比如,也许会这么写:
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。
文章出处 http://blog.csdn.net/historyasamirror/article/details/6076505
分享到:
相关推荐
Java.lang.ref 包是 Java 类库中的一个重要组成部分,它包含了与垃圾回收机制密切相关的引用类。这些引用类的设计允许开发者在特定条件下控制对象的生命周期,尤其是在处理缓存、大型数据结构或者避免内存泄漏时显得...
SoftReference<String> softRef = new SoftReference(new String("Soft")); ``` - `WeakHashMap`是使用软引用作为键的一个例子,即使键的对象在其他地方仍被引用,只要内存压力增大,键对象也会被回收。 3. **弱...
在`java.lang.ref`包中,有三个类分别对应这四种引用:`SoftReference`、`WeakReference`和`PhantomReference`。此外,`ReferenceQueue`用于存储被回收引用的实例,以便开发者可以监控对象的回收状态。 在实际应用...
SoftReference<Object> softRef = new SoftReference(new Object()); ``` 软引用通常用于实现内存敏感的缓存技术。例如,当应用程序加载图像或大型数据结构时,可以使用软引用将这些数据缓存起来。当内存紧张时,...
本篇将详细讲解如何利用软引用(SoftReference)来解决Android OOM问题,并探讨其工作原理以及在实际应用中的注意事项。 **软引用(SoftReference)的概念** 软引用是Java内存模型中的一种特殊引用类型,它介于强...
SoftReference、WeakReference和PhantomReference分析和比较 在 Java 中,引用类型分为强引用、软引用、弱引用和虚引用四种。强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种...
Java使用`java.lang.ref.SoftReference`类来表示软引用。 - 当内存空间不足时,JVM会回收软引用关联的对象,以防止`OutOfMemoryError`的发生。软引用常用于实现缓存,如网页缓存和图片缓存,以便在内存紧张时自动...
Java从1.2版本开始引入了四种引用,分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这四种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用...
SoftReference<String> softRef = new SoftReference(new String("Soft Reference")); ``` 然后是“弱引用”。与软引用相比,弱引用的对象在下一次垃圾收集时就会被回收,无论系统内存是否充足。弱引用通常用于创建...
本篇文章将深入探讨如何使用Java中的软引用(SoftReference)来缓存图片,并结合异步加载策略来实现高效的图片加载机制。 一、软引用(SoftReference)的概念与作用 软引用是Java内存管理中的一种特性,它是一种弱...
Java中的SoftReference即对象的软引用。如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用...
软引用由`java.lang.ref.SoftReference`类表示。 - 软引用常用于缓存策略,以在内存紧张时释放缓存对象,但不立即导致应用崩溃。 3. **弱引用(Weak Reference)** - 弱引用比软引用更“弱”,只要垃圾回收器扫描...
2. **软引用**:使用Java的`SoftReference`可以创建一个弱化的缓存,这样在内存紧张时,JVM会自动回收这些不再使用的反射对象,以释放内存。 ```java public class ReflectionUtil { private static Map, ...
为了防止这种情况,可以使用对象池,限制数据结构大小,或者使用`WeakReference`和`SoftReference`来减少内存占用。另外,了解Java的内存模型(如堆内存、栈内存和方法区)也有助于优化内存分配。 其次,分片处理是...
`java.lang.ref` 提供了与垃圾收集器交互的引用对象类,如 `WeakReference`, `SoftReference`。 `java.lang.reflect` 允许程序在运行时检查类和对象的结构。 `java.math` 包提供高精度的数学运算,如 `BigInteger`...
面试官可能会让你解释 finalize() 方法的作用,以及何时应该使用 WeakReference 或 SoftReference。 7. **接口与抽象类**:两者之间的选择,以及Java 8引入的默认方法(default methods)如何改变这一格局。接口...
在实际应用中,LRU算法不仅可以用于操作系统中的页面替换,还可以应用于数据库查询缓存、编程语言的内存管理(如Java的SoftReference和WeakReference)以及Web服务器的静态资源缓存等场景。 总的来说,Java实现LRU...
3. **Java_04_Ref**:这部分可能涉及到Java中的引用类型,如软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这些引用类型用于内存管理,帮助开发者避免内存泄漏,尤其是在大内存...
3. 使用弱引用和软引用:在某些场景下,可以使用WeakReference或SoftReference,让对象在需要时可以被GC回收。 4. 优化单例模式:确保单例对象在不再需要时能被正确清理。 5. 限制静态集合类大小:避免无限增长的...