1 弱引用 (WeakReference)

弱引用对象,这些对象不会阻止对其引用对象进行终结,终结和回收。弱引用最常用于实现规范化映射。假设垃圾收集器在某个时间点确定对象是弱可到达的。到那时,它将自动清除对该对象的所有弱引用以及对所有其他弱可达对象的弱引用,这些对象都可以通过一系列强引用和软引用从该对象到达。同时,它将声明所有以前弱可及的对象都是可终结的。同时或稍后,它将把那些新近清除的弱引用加入队列,这些弱引用已在引用队列中注册

简单的理解就是:弱引用用来描述非必须对象的,当gc进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。

1.1 下面以定义一个String 对象来说下弱引用 (WeakReference)的使用

  WeakReference<String> str = new WeakReference<>("弱引用");Log.e("---------str", str.get());

1.2 加载一个图片的demo

先看下普通的使用

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.image);Drawable drawable = new BitmapDrawable(bitmap);imageView.setBackground(drawable);

如果使用弱引用 (WeakReference)如下

  Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.image);Drawable drawable = new BitmapDrawable(bitmap);WeakReference<Drawable> weakDrawable = new WeakReference<>(drawable);Drawable bgdrawable = weakDrawable.get();if(bgdrawable != null) {imageView.setBackground(drawable);}

扩展下引用,引用有4中强引用、软引用、弱引用、虚引用

2 强引用:

  String st = new String("强引用");

如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题

3 软引用(SoftReference)

下面是官方的说法:

软引用对象,垃圾回收器会根据内存需求酌情清除这些对象。

假设垃圾收集器在某个时间点确定可以轻柔地到达对象。那时,它可以选择原子地清除对该对象的所有软引用,以及对所有其他软可访问对象的所有软引用,这些对象都可以通过一系列强引用从该对象到达该对象。同时或在以后的某个时间,它将排队那些已在引用队列中注册的新清除的软引用。

确保在虚拟机抛出之前清除了对所有可软访问对象的软引用 OutOfMemoryError。否则,在清除软引用的时间或清除对不同对象的一组此类引用的时间上将没有任何限制。但是,鼓励虚拟机实现偏向于清除最近创建或最近使用的软引用。

避免使用软引用进行缓存

实际上,软引用在缓存方面效率低下。运行时没有足够的信息来清除和保留哪些引用。最致命的是,在清除软引用和增大堆之间进行选择时,它不知道该怎么办。

缺少有关每个参考的应用价值的信息,限制了软参考的实用性。过早清除引用会导致不必要的工作;那些清除得太晚会浪费内存。

大多数应用程序应使用android.util.LruCache而不是软引用。LruCache具有有效的逐出策略,并允许用户调整分配的内存量。

软引用的使用和弱引用差不多

 SoftReference<String> str = new SoftReference<>("软引用");Log.e("---------str", str.get());

4 虚引用(PhantomReference)

虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。

参考文章:https://www.jianshu.com/p/8488079a939b

Android 弱引用 (WeakReference)的使用相关推荐

  1. 弱引用WeakReference和软引用SoftReference

    在Java1.2中我们可以发现一个java.lang.ref包,在这个包中我们可以发现有关引用的知识,比如WeakReference弱引用和SoftReference强引用. 弱引用(WeakRefe ...

  2. 弱引用WeakReference作用与使用场景

    文章目录 1. Demo 2. 使用场景 在分析threadLocal源码时,发现有使用弱引用WeakReference,在之前总结GC的时候,也曾简单介绍java引用类型(<jvm GC算法类 ...

  3. Android学习笔记之SoftReference软引用,弱引用WeakReference

    SoftReference可以用于bitmap缓存 WeakReference 可以用于handler 非静态内部类和匿名内部类容易造成内存泄漏 private Handler mRemoteHand ...

  4. android 软引用intent对象,Android中的软引用(SoftRefrerence)和弱引用(WeakReference)

    在Android开发中,基本上很少有用到软引用或弱引用,这两个东东若用的很好,对自己开发的代码质量的提高有很大的帮助.若用的不好,会坑了自己.所以,在还没有真正的去了解它们之前,还是慎用比较好. 下面 ...

  5. Android 弱引用和软引用

    软引用 和 弱引用 1.  SoftReference<T>:软引用-->当虚拟机内存不足时,将会回收它指向的对象:需要获取对象时,可以调用get方法. 2.  WeakRefere ...

  6. SAP ABAP和Java里的弱引用(WeakReference)和软引用(SoftReference)

    Jerry前一篇文章 SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析 介绍了在ABAP里判断引用变量是否包含了一个有效引用的关键字:IS ...

  7. 弱引用WeakReference

    WeakReference是Java语言规范中为了区别直接的对象引用(程序中通过构造函数声明出来的对象引用)而定义的另外一种引用关系.WeakReference标志性的特点是:reference实例不 ...

  8. Java中的弱引用WeakReference详解

    最近再看ThreadLocal源码,其中内部类ThreadLocalMap中的Entry类继承了WeakReference,其表示key的ThreadLocal对象是通过弱应用指向,如果外部没有强引用 ...

  9. Java弱引用(WeakReference)的理解与使用

    转:https://blog.csdn.net/zmx729618/article/details/54093532 看到篇帖子, 国外一个技术面试官在面试senior java developer的 ...

最新文章

  1. diy nas配置推荐2020_2020适合大学生专业需求及玩游戏的电脑配置推荐
  2. Win系统复制粘贴失效解决办法
  3. [云炬创业基础笔记]第二章创业者测试21
  4. 用作键提取器的函数的 Boost.MultiIndex 示例
  5. 灰色的rgb值_一行代码实现图片的灰色效果
  6. 【数据结构与算法】之深入解析“丑数”的求解思路与算法示例
  7. MySQL更新会影响查询吗_mysql更新查询不会执行
  8. STM32中C语言知识点:初学者必看,老鸟复习(长文总结)
  9. 人工智能为失散家人寻找“回家路”
  10. 二扩域元素与整数的转换
  11. 5道经典基础编程题让你入门C语言
  12. python拼音识别多音字的包_一个有意思还有用的Python包-汉字转换拼音
  13. 你焊接过最小的贴片器件是多大?
  14. 别错过!漂亮又好用的思维导图模板
  15. 软磁材料和硬磁材料的区别
  16. 李沐动手学深度学习V2-attention注意力机制
  17. 判断Linux环境是否装了NCCL,安装cuDNN和NCCL指南
  18. Kaggle泰坦尼克号生存预测挑战——模型建立、模型调参、融合
  19. IP解析成地址 确定省市
  20. [52PJ] Java面向对象笔记(转自52 1510988116)

热门文章

  1. 2022-2028年中国毛纺行业研究及前瞻分析报告
  2. 2022-2028年中国香薰行业市场研究及前瞻分析报告
  3. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别
  4. SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤
  5. 直方图_20210420
  6. Attention机制_pytorch
  7. Swift与LLVM-Clang原理与示例
  8. 科技公司合作伙伴清单
  9. pytorch空间变换网络
  10. 地理围栏API服务开发