首页 > 编程语言 >[Java、Android面试]_08_强软弱虚四种引用及应用场景

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

时间:2024-03-18 14:01:10浏览次数:39  
标签:场景 Java 对象 08 回收 面试 引用 new Android

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

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

文章目录

引用在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);  

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

标签:场景,Java,对象,08,回收,面试,引用,new,Android
From: https://blog.csdn.net/qq_41915623/article/details/136806857

相关文章

  • android ipc
    AndroidIPC(Inter-ProcessCommunication,进程间通信)是指在Android系统中,不同应用程序或同一个应用程序的不同进程之间进行数据交换和通信的机制。Android提供了多种IPC的方式,包括:Intent:用于在不同组件之间传递数据,适用于同一应用程序内的不同组件之间通信。Binder:Andr......
  • Java_Idea打jar包
    1.在使用Maven的时候,如果我们要依赖一个本地的jar包的时候,01.resources目录下创建一个lib文件夹(也可以创建到根目录下),将外部的jar包复制拷贝到lib下面02.pom文件 通常都会使用<scope>system</scope>和<systemPath></systemPath>来处理需要在maven插接中配置一个includeSyst......
  • java八股——mysql数据库
    上一篇传送门:点我JVM是java面试八股中的一个重难点,本文仅是部分问题,SQL语句、主从复制以及数据库锁等知识点还未涉及,后续会进行修改补充。数据库三大范式是什么?第一范式:每个字段都不可以再被拆分;第二范式:在第一范式的基础上,有主键,并且主键之外的其他字段完全依赖于主键,......
  • 还在用Calendar操作Date?Java8都弃用了,还不知道它的这款强大的工具吗?
    引言在过去的Java版本中,日期和时间的处理主要依赖于java.util.Date和java.util.Calendar类,然而随着业务系统的复杂以及技术层面的提升,这些传统的日期时间类暴露出了若干显著的不足之处。随着Java8的发布,其引入了一套全新的日期时间API,彻底改变了我们处理日期和时间的方式。传统......
  • 华为OD机试Java - 机器人搬砖
    机器人搬砖前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述机器人搬砖,一共有N......
  • 华为OD机试Java - 转盘寿司
    转盘寿司前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述寿司店周年庆,正在举办......
  • 华为OD机试Java - 分月饼
    分月饼前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述中秋节,公司分月饼,m个员......
  • [Java·算法·中等] LeetCode21. 合并两个有序链表
    人不走空                                          ......
  • [npm] npm打包/运行时,报:"95% emitting CompressionPlugin ERROR Error: error:030801
    1问题描述环境信息windows10node:v20.11.1>node--versionv20.11.1vue:2.6.12[dependencies]"vue":"2.6.12""vue-count-to":"1.0.13""vue-cropper":"0.5.5""vue-meta":&q......
  • Java基础——抽象类和接口详细解读
    文章目录前言一、抽象类1、什么是抽象类?2、抽象类的定义规范和要求2.1、抽象类不能被实例化2.2、抽象类内的属性和方法定义2.2、抽象类的修饰符要求2.4、继承类要求3、抽象类的应用3.1、实现共有特性特征和行为3.2、代码复用4、抽象类总结二、接口1、什么是接口?2、接......