当前位置: 首页 > article >正文

[Java、Android面试]_08_强软弱虚四种引用及应用场景

本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。

整理成了面试系列,由于时间有限,每天整理一点,后续会陆续分享出来,感兴趣的朋友可关注+收藏

文章目录

    • 1. 强引用(默认的引用形式)
    • 2. 软引用
    • 3. 弱引用
    • 4. 虚引用

引用在java中是非常常见的,四种应用概况如下:
在这里插入图片描述

1. 强引用(默认的引用形式)

Andorid中默认的引用形式,当一个对象被强引用时,GC不会回收该对象,只有当该引用被释放后,对象才能被释放。

1.String str = "Hello World";  

应用场景:
绝大部分都是强引用。

2. 软引用

GC可能会回收只被软引用的对象,但不一定会被回收。软引用常被用于缓存数据,当
内存不足时,回收部分缓存数据,避免OutOfMemory.
软引用在内存充足时,不会被回收,内存不足时会被回收,通常用来做数据缓存。

1.SoftReference<Bitmap> softRef = new SoftReference<>(bitmap);  

应用场景:
数据缓存。

3. 弱引用

弱引用是一种比软引用更弱的引用类型。弱引用指向的对象在下一次垃圾回收时会被回收。弱引用通常用于解决内存泄漏问题,特别是处理容易造成循环引用的场景。当对象只被弱引用指向时,垃圾回收器会更容易回收该对象。

1.WeakReference<Context> weakRef = new WeakReference<>(context);  

在下一次垃圾回收时,无论内存是否足够,都会被回收;

应用场景:
一般用于避免内存泄漏;如,使用弱引用来注册回调函数,避免回调函数持
有的强应用导致无法被回收。

4. 虚引用

虚引用是最弱的引用类型。虚引用的存在主要是为了监控对象被垃圾回收的过程。虚引用无法通过get()方法获取到对象的实例,而只能通过PhantomReference类提供的相关方法来进行操作。在垃圾回收器准备回收一个对象时,会将其放入引用队列中,通过监听引用队列,可以了解到对象被回收的时机。

1.ReferenceQueue<MyObject> queue = new ReferenceQueue<>();  
2.PhantomReference<MyObject> phantomRef = new PhantomReference<>(myObject, queue);  

应用场景:
用于跟踪对象的销毁过程,虚引用必须与引用队列一起使用,以便在对象被回收时得到通知。


http://www.kler.cn/news/274467.html

相关文章:

  • 【Week Y2】使用自己的数据集训练YOLO-v5s
  • docker入门(一)—— docker概述
  • Hive借助java反射解决User-agent编码乱码问题
  • 学生课程数据库综合操作(SQL)
  • android 怎么自定义view
  • 【博士每天一篇文献-综述】Brain network communication_ concepts, models and applications
  • vue3实现输入框短信验证码功能---全网始祖
  • 【华为OD机试】绘图机器【C卷|100分】
  • 虚拟游戏理财 - 华为OD统一考试(C卷)
  • CVE-2019-5782:kArgumentsLengthType 设置偏小导致优化阶段可以错误的去除 CheckBound 节点
  • 【ESP32 IDF】ESPTIMER定时器
  • Java八股文(RabbitMQ)
  • mysql事务和行锁
  • 串口123
  • 《算法王晓东》最小重量机器设计问题
  • JavaSE(上)-Day6
  • 基于openresty构建运维工具链实践
  • Elasticsearch常用语句
  • 系统架构设计师笔记第37期:数据访问层设计
  • 保姆级docker 容器安装部署 MySQL:5.7主从复制