[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.mzph.cn/news/756105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot3框架,基础特性

MyBatis整合 导入MyBatis整合的依赖&#xff1a; <!-- <https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter> --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-…

电机驱动器不确定性建模

跟踪误差信号和执行器驱动信号在控制系统的设计中也很重要&#xff01;&#xff01;&#xff01; 不确定度可分为扰动信号和动态扰动两类。前者包括输入和输出干扰&#xff08;如飞机上的阵风&#xff09;、传感器噪声和执行器噪声等。后者表示数学模型与系统在运行中的实际动…

Geostationary IR Channel Brightness Temperature - GridSat B1 -- shell下载

进入网页 https://www.ncei.noaa.gov/products/gridded-geostationary-brightness-temperature 然后进入数据目录&#xff0c;通过https的方式进行下载&#xff1a; 点击后进入如下界面&#xff1a; 点击任意年份进行下载 这里以2004年为例&#xff0c;如下所示&#xff1…

【CSS练习】万年历 html+css+js

效果图 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title><style>bod…

实现:mysql-5.7.42 到 mysql-8.2.0 的升级(二进制方式)

实现&#xff1a;mysql-5.7.42 到 mysql-8.2.0 的升级&#xff08;二进制方式&#xff09; 1、操作环境1、查看当前数据库版本2、操作系统版本3、查看 Linux 系统上的 glibc&#xff08;GNU C 库&#xff09;版本&#xff08;**这里很重要&#xff0c;要下载对应的内核mysql版本…

软件设计师

计算机系统知识 浮点数 运算&#xff1a;小阶对齐大阶 海明码 数据位n校验位k&#xff0c;必须满足 2k-1≥nk 吞吐率 p为最长子过程的倒数 数据结构 图 深度遍历时间复杂度&#xff1a; 邻接矩阵n2 邻接表ne 操作系统 进程 信号量P、V、S P申请资源&#xff0c;V释…

Linux 进程管理工具top ps

概述 top 和 ps 是 Linux 系统中两个非常重要的用于管理和监控进程的命令工具。以下是它们的主要功能和区别&#xff1a; top&#xff1a; 动态视图&#xff1a;top 提供了一个实时动态更新的视图&#xff0c;能够持续显示系统中当前正在运行的进程信息及其资源占用情况。 系统…

安卓面试题多线程11-15

11. 如何使用thread dump?你将如何分析Thread dump?在UNIX中你可以使用kill -3,然后thread dump将会打印日志,在windows中你可以使用”CTRL+Break”。非常简单和专业的线程面试问题,但是如果他问你怎样分析它,就会很棘手。🚀🚀🚀🚀🚀🚀12. Java中你怎样唤醒一…

注意力机制 self-attention 的原理探究

一、点积的认识 向量的点积可以表示相似性的原因在于它衡量了两个向量之间的方向是否相似。当两个向量的方向趋于一致时&#xff0c;它们的点积会更大&#xff1b;当两个向量的方向趋于相互垂直时&#xff0c;它们的点积会接近于0。这种性质使得点积在衡量向量之间的相似性和相…

聚合函数和GROUP BY

1、聚合函数 1.1 聚合函数概念 聚合函数是用于对一组数值进行计算并返回单一数值作为结果的函数。在数据库查询中&#xff0c;它们通常用于对数据进行汇总和统计分析。常见的聚合函数包括 SUM、AVG、COUNT、MAX 和 MIN 等。 1.2 函数介绍 1.2.1 SUM&#xff08;求和&#x…

Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件

拓展阅读 Devops-01-devops 是什么&#xff1f; Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件 代码质量管理 SonarQube-01-入门介绍 项目管理平台-01-jira 入门介绍 缺陷跟踪管理系统&#xff0c;为针对缺陷管理、任务追踪和项目管理的商业…

ins中扰动分析举例

扰动分析很重要&#xff0c;搞明白扰动分析&#xff0c;基本上就可以清楚了误差模型。 什么是扰动分析&#xff1a; 简单理解 测量值 真值 误差 这里的误差就是与测量直接对应的误差&#xff0c;例如 把误差分离出来 误差 测量值 - 真值 &#xff…

如何在海外服务器上配置静态路由?

在海外服务器上配置静态路由可以通过操作系统提供的网络配置工具来实现。下面是在常见操作系统上配置静态路由的一般步骤&#xff1a; 在 Windows 上&#xff1a; 打开命令提示符&#xff1a;在开始菜单中搜索并打开“命令提示符”(或者以管理员身份运行)。 查看当前路由表&…

基于arm的ubuntu上运行qgc

个需要在基于arm的ubuntu上运行qgc的人&#xff1a; 总结如下 &#xff1a; 必须安装 flatpak 1.12.4 。 要安装 1.12.4&#xff0c;请在终端中运行以下命令&#xff1a; sudo add-apt-repository ppa:alexlarsson/flatpak sudo apt update sudo apt install flatpak flatpak …

Docker基本配置及使用

Docker基本配置及使用 使用步骤 1.卸载旧版 代码如下&#xff1a;首先如果系统中已经存在旧的Docker&#xff0c;则先卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engin…

网站首页添加JS弹屏公告窗口教程

很多小白站长会遇到想给自己的网站添加一个弹屏公告&#xff0c;用于做活动说明、演示站提示等作用与目的。 下面直接上代码&#xff1a;&#xff08;直接复制到网页头部、底部php、HTML文件中&#xff09; <script src"https://www.mohuda.com/site/js/sweetalert.m…

0基础学习VR全景平台篇第145篇:图层控件功能

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01;这期&#xff0c;我们将为大家介绍如何使用图层控件功能。 一.如何使用图层控件功能&#xff1f; 进入作品编辑页面&#xff0c;点击左边的控件后就可以在右边进行相应设置。 二.图层控件有哪些功能&am…

款海韵-650LX:电流参数是最大电流!

其实&#xff0c;在选择电源时&#xff0c;不需要担心峰值功率和额定功率。 您只需检查参数是否与您相应部件的功率匹配即可。 1.首先需要了解各个参数的含义。 电源上有5个电压参数&#xff0c;分别是12V、5V、3.3V、5VSB、-12V。 12V为CPU、显卡和机械硬盘的电机部分供电。 …

python中的excel操作

操作excel 在Python中&#xff0c;处理Excel文件的常用模块有xlrd、xlwt和openpyxl。以下是对这些模块的简要介绍&#xff1a; xlrd: xlrd是一个用于读取Excel&#xff08;.xls和.xlsx&#xff09;文件数据的库。它提供了方便的API来访问Excel文件中的工作表、行、列和单元格。…