今天在看工程源码的时候看到了SoftReference这个类。
用来缓存我们软件的一些图片,好奇。就看了看这个类的作用。
首先这篇文章要讲的是两个内存管理相关的类WeakReference和SoftReference。
首相SoftReference的用处是增强一个引用常驻在内存的能力。也就是说一个引用比如A a=new A();
此时如果你把a=null;那么在不久之后的某个时间点,java虚拟机的内存回收机制就会把这个引用所占用的内存释放掉。
如果有时候,我们想让一个引用常驻内存而不是被回收,则可以用到softreference,比如上文的a引用。
用:SoftReference sr=new SoftReference(a);
这段代码就可以让a引用常驻内存,不会被回收。那可能就有疑问了,如果空引用也不回收那么内存很容易就溢出了。但是softreference可以保证 在抛出OutOfMemory异常之前会让虚拟机回收那些已经为空的引用,防止异常的发生。这就是softreference大概的用处。
概括起来就是:用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常。
weakReference一般用来防止内存泄漏,要保证内存被VM回收
WeakReference,暂时我所了解的用处是当你想知道被设置为空的引用什么时候被回收时可以用到WeakReference。在代码上与SoftReference的用法是一样的。下面试一段简单的Demo代码
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
public class Test {
public static void main(String[] args) throws InterruptedException
{
A a=new A();
a.test();
WeakReference wr=new WeakReference(a);
//SoftReference sr=new SoftReference(a);
a=null;
while(true)
{
if(sr.get()!=null)
{
System.out.println("还没有被清楚");
}else
{
System.out.println("已经被清除了");
break;
}
}
}
}
class A{
public void test()
{
System.out.println("I am A");
}
}
分享到:
相关推荐
SoftReference、WeakReference和PhantomRefrence分析和比较
StrongReference,SoftReference, WeakReference的使用实例,请参照博客:http://blog.csdn.net/To_be_Designer/article/details/72673421
3.1 强引 3.2 软引 3.3 弱引 3. 4 假象引
ava有四种引用类型,strongreference,softreference,weakreference,phantomreference。本篇文档主要的就是进阶的介绍和了解这四种引用类型的异同点,助于你对java的更好的学习理解
周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了PhantomReference这玩意儿,得恶补基础啊),这三种都是弱引用,区别在于强度...
本文实例讲述了Android基于SoftReference...SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。也就是说,一旦SoftReference保存了对一个Java对象的
软引用(Soft Reference)的主要特点是具有较强的引用功能。只有当内存不够的时候才回收这类内存,因此在内存... import java.lang.ref.SoftReference; public class softReference { /** * @param args *
Android的内存管理-SoftReference的使用、Android垃圾回收实质内容解析、如何避免Android内存泄露等
软引用SoftReference1
通过软引用SoftReference缓存图片及实现图片的异步加载
1.强引用1.强引用 2.软引用(SoftReference) 3.弱引用(WeakReference) 4.虚引用(PhantomReference) 等等;
android缓存管理器,分为两级缓存:内存缓存和文件缓存;先取内存数据,没有再从文件缓存中获取特点封装,继承其所有功能二级缓存内存缓存(采用SoftReference和LruCache,防止内存溢出)文件缓存(由ASimpleCache...
├─Google Guava 第01讲-Joiner详细介绍以及和Java8Collector对比.wmv ├─Google Guava 第02讲-Guava Splitter详细讲解以及实战练习.wmv ├─Google Guava 第03讲-Preconditions&Objects;&assert;讲解.wmv ├─...
【多线程】简述synchronized 和java.util.concurrent.locks.Lock的异同? 90 【线程】ThreadLocal的作用 90 【Spring】什么是IOC和DI?DI是如何实现的 91 【Spring】spring中的IOC(控制反转)的原理 92 【Spring】...
他们分别是强引用(StrongReference),软引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虚引用),他们被 GC回收的可能性从小到大排列。 强引用(StrongReference) 只要强引用存在,垃圾回收器将...
3.2 如果使用软引用SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程对该Java对象的回收 3.
当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 ⑵软引用(SoftReference) 如果一个对象只具有软引用,则内存空间足够,...