Android缓存中的四种类型

a.强引用 
---什么是强引用?
在某个函数中创建了一个对象,那该对象存储在堆空间,能过这个对象的引用才能对这个对象进行操作(实例化对象的变量)
实例化的变量是分配在栈空间中,这就是强引用
---强引用的特点?
  • 直接访问目录对象
  • 强引用所指向的对象在任何时候都不会被系统回收,jvm宁愿抛出oom异常,也不会回收强引用所指向的对象
  • 强引用可能会导致内存泄露

b.软引用
---什么是软引用?
软引用是除强引用外,最强的引用类型,可以通过java.lang.ref.SoftReference使用软引用。(SoftReference<drawable>)一个持有软引用的对象,不会被jvm很快回收,jvm会根据当时堆的使用情况来判断何时回收,当堆的使用率达到阈值时,才会回收软引用的对象

//创建一个软引用
SoftReference<Drawable> drawables=new SoftReference<Drawable>(一个drawable对象实例)
//进行不为空判断
if(drawables!=null){
   //使用drawables.get()方法来得到软引用对象值
   //如果内存吃紧时,drawables.get()的返回值将为null,图片不会显示
   view.setBackGroundDrawable(drawables.get());
}

---使用软引用的好处?
(场景在加载大量网络图片时)在系统内存较紧张时,软引用会被回收。这样最坏的结果是图片显示不出来,但系统不会因内存不足(内存溢出OutOfMemory),而导致app崩溃。

c.弱引用
---什么是弱引用?
弱引用是一种比软引用还弱的引用类型,在系统GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收。但是由于接收回收器的线程通常优先级很低。因此,并不一定能很快的发现持有弱引用的对象。这种情况下,弱引用对象可以存在较长一段时间。

//创建
WeakReference<?>      mview=new WeakReference<?>()
//调用
mview.get()


d.虚引用
虚引用是所有引用类型中最弱的一个。一个持有虚引用 的对象,和没有引用几乎是一样的,随时都可能被垃圾回收器回收。
实际几乎没用


缓存类型的比较

软引用和弱引用都非常适合来保存那些可有可无的缓存数据。如果这样做,当系统内存不足时,这些缓存数据会被回收,不会导致内存溢出。而当内存资源充足时,这些缓存数据又可以存在相当长的时间

参考: http://blog.csdn.net/hejjunlin/article/details/52637333

猜你喜欢

转载自blog.csdn.net/qpdb19981023/article/details/78715856