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

持续总结中!2024年面试必问 100 道 Java基础面试题(四十二)

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(四十一)-CSDN博客

八十三、如何判断一个对象是否应该被垃圾回收?

在Java中,判断一个对象是否应该被垃圾回收的关键在于对象的引用状态。垃圾回收器(Garbage Collector, GC)主要通过跟踪对象的引用来决定哪些对象不再需要,可以被回收。以下是如何判断一个对象是否可以被垃圾回收的详细解释:

对象的引用状态

  1. 强引用(Strongly Reachable)

    • 如果对象从根集合(如类实例、局部变量等)直接或间接被引用,那么这个对象是强引用的,它不会被垃圾回收。
  2. 软引用(Softly Reachable)

    • 如果对象只被软引用关联,那么在内存充足时,对象不会被回收,但在内存不足时,垃圾回收器会考虑回收这些对象。
  3. 弱引用(Weakly Reachable)

    • 对象被弱引用关联时,垃圾回收器会在下一次GC时回收这些对象,无论内存是否充足。
  4. 虚引用(Phantom Reachable)

    • 虚引用不会阻止对象的垃圾回收,它们的唯一目的是在对象被回收后收到一个系统通知。
  5. 无引用(Unreachable)

    • 如果对象到根集合之间没有任何引用链,那么这个对象被认为是无引用的,它将被垃圾回收。

垃圾回收器的判断过程

  1. 跟踪引用

    • 垃圾回收器会跟踪从根集合开始的所有引用链。
  2. 标记

    • 在标记阶段,GC遍历所有对象,标记所有可以通过GC Roots直接或间接访问到的对象。
  3. 清除

    • 在清除阶段,GC移除所有未被标记的对象,这些对象被认为是无引用的,可以被回收。
  4. 回收

    • 垃圾回收器释放被清除对象占用的内存,并将其归还给堆内存,以便将来分配新对象。

示例代码

public class GarbageCollectionExample {public static void main(String[] args) {Object obj1 = new Object(); // obj1是强引用的SoftReference<Object> softRef = new SoftReference<>(obj1); // obj1也是软引用的WeakReference<Object> weakRef = new WeakReference<>(obj1); // obj1也是弱引用的obj1 = null; // 清除obj1的强引用// 此时,obj1的软引用和弱引用仍然存在,但obj1的强引用已被清除// 垃圾回收器会在适当的时候回收obj1}
}

在这个示例中,obj1最初是强引用的,当它的强引用被设置为null时,它变成了无引用对象。尽管存在软引用和弱引用,但垃圾回收器仍然可以回收obj1

注意事项

  • 引用类型:了解不同引用类型的行为对于管理对象的生命周期和内存使用非常重要。

  • 垃圾回收触发:垃圾回收的触发条件和频率取决于JVM的具体实现和垃圾回收策略。

  • 性能影响:过度的垃圾回收会降低程序性能,因此合理分配和释放内存对于性能优化至关重要。

总结来说,判断一个对象是否可以被垃圾回收主要取决于它是否与根集合之间存在引用链。垃圾回收器通过跟踪这些引用链来识别无引用对象,并在适当的时候进行回收。

八十四、请解释Java中的强引用、软引用、弱引用和虚引用?

在Java中,引用(Reference)是一种用于跟踪对象是否还应该在内存中存活的机制。Java提供了四种类型的引用,它们定义了不同的GC行为:

强引用(Strongly Reachable)

  • 强引用是最普通的引用类型,当一个对象具有强引用时,它不会被垃圾回收器回收,直到这个引用被显式地设置为null,或者从它所属的上下文中被移除。
  • 示例:通过new关键字创建的对象默认具有强引用。
Object obj = new Object();

软引用(Softly Reachable)

  • 软引用通过java.lang.ref.SoftReference类实现,它们用来跟踪非必需对象。当内存充足时,软引用对象不会被回收,但是在内存不足时,垃圾回收器会优先回收这些对象。
  • 软引用常用于实现内存敏感的缓存,如图片缓存或其他大对象的缓存。
SoftReference<Object> softRef = new SoftReference<>(obj);

弱引用(Weakly Reachable)

  • 弱引用通过java.lang.ref.WeakReference类实现,它们比软引用的生存期更短。只要垃圾回收器执行,无论内存是否充足,弱引用对象都会被回收。
  • 弱引用常用于实现对象注册表或跟踪一些临时对象,而不用担心内存泄露。
WeakReference<Object> weakRef = new WeakReference<>(obj);

虚引用(Phantom Reachable)

  • 虚引用是生存期最短的引用,通过java.lang.ref.PhantomReference类实现。一个对象如果有虚引用,那么它几乎相当于没有引用,随时可能被垃圾回收器回收。
  • 虚引用主要用于跟踪对象被垃圾回收的行为,比如在对象被回收前执行一些清理工作。要获取虚引用,需要对象先被设置为null,然后通过java.lang.ref.ReferenceQueue来注册虚引用。
ReferenceQueue<Object> refQueue = new ReferenceQueue<>();
Object obj = new Object();
obj = null; // 清除强引用
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), refQueue);

注意事项

  • 内存感知:软引用和弱引用可以帮助开发者创建对内存感知的程序,它们在内存不足时可以被回收,从而避免内存溢出。
  • 生命周期:虚引用的生命周期最短,它们几乎不会阻止对象的垃圾回收。
  • 使用场景:根据对象的重要性和内存使用策略,选择合适的引用类型。
  • 回收时机:垃圾回收器的回收时机是不确定的,即使内存不足,软引用和弱引用的对象也可能不被立即回收。

总结来说,Java中的四种引用类型提供了不同的GC行为,允许开发者根据程序的内存使用需求和对象的重要性来管理对象的生命周期。

相关文章:

持续总结中!2024年面试必问 100 道 Java基础面试题(四十二)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 100 道 Java基础面试题&#xff08;四十一&#xff09;-CSDN博客 八十三、如何判断一个对象是否应该被垃圾回收&#xff1f; 在Java中&#xff0c;判断一个对象是否应该被垃圾回收的关键在于对象的引用状态。垃圾…...

Linux 之 tail 命令

一、基本语法 tail [option] [file] 其中 option 是可选参数&#xff0c;用于定制命令的行为&#xff0c;file 则是要处理的目标文件名。 二、常用参数 几个常用的 option 选项&#xff1a; -n&#xff1a;显示文件的最后 n 行&#xff0c;默认为 10 行。-f&#xff1a;实…...

【Android学习】简单的登录页面和业务逻辑实现

实现功能 1 登录页&#xff1a;密码登录和验证码登录 2 忘记密码页&#xff1a;修改密码 3 页面基础逻辑 java代码 基础页面 XML login_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.and…...

Mysql数据库的基础学习

为什么使用数据库&#xff1f; 1.持久化&#xff1a;将数据保存到可掉电式存储设备中以供使用。 数据库相关概念&#xff1a; DB:数据库&#xff08;Databass&#xff09;即存储数据的仓库&#xff0c;本质是一个文件系统&#xff0c;保存了一系列有组织的数据DBMS:数据库管…...

CentOS7 安装 Kamailio

https://www.kamailio.org/wiki/packages/rpms 官方文档说 yum -y install yum-utils yum-config-manager --add-repo https://rpm.kamailio.org/centos/kamailio.repo 但目前这样其实行不通 需要这样做&#xff1a; yum install --disablerepokamailio --enablerepokamai…...

Tomcat启动闪退问题解决办法

本文将通过一系列诊断步骤帮助您找出原因&#xff0c;并提供相应的解决办法。 诊断步骤 查看日志文件 Tomcat的日志文件是解决启动问题的第一线工具。查看logs目录下的catalina.out和其他日志文件&#xff0c;这些文件经常记录了错误信息和系统崩溃的线索。 cat /path/to/to…...

单元测试之JUnit5知识点总结及代码示例

单元测试是软件开发过程中的一种验证手段&#xff0c;它针对最小的可测试部分&#xff08;通常是函数或方法&#xff09;进行检查和验证。其实单元测试还是挺重要的&#xff0c;不过国内很多公司的项目其实并没有做好单元测试&#xff0c;或者根本就没做单元测试&#xff0c;原…...

什么是数据平台——企业构建Data+AI的基础数据底座需要的决策参考

什么是数据平台 标准的解释是这样的 Wikipedia A data platform usually refers to a software platform used for collecting and managing data, and acting as a data delivery point for application and reporting software. 数据平台是指将各类数据进行整合、存储、处…...

Oracle 流stream数据的复制

Oracle 流stream数据的复制 --实验的目的是捕获scott.emp1表的变化&#xff0c;将变化应用到远程数据库scott.emp1表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 GLOBAL_NAMEStrue JOB_QUEUE_PROCESSES2 --查看数据库的名称&#xff0c;我的为o…...

「 安全设计 」68家国内外科技巨头和安全巨头参与了CISA发起的安全设计承诺,包含MFA、默认密码、CVE、VDP等七大承诺目标

美国网络安全和基础设施安全局&#xff08;CISA&#xff0c;CyberSecurity & Infrastructure Security Agency&#xff09;于2024年5月开始呼吁企业是时候将网络安全融入到技术产品的设计和制造中了&#xff0c;并发起了安全设计承诺行动&#xff0c;该承诺旨在补充和建立现…...

【K8S】pod无限重启,报错Back-off restarting failed container

1. 问题 pod启动后一直重启&#xff0c;并报Back-off restarting failed container。 原理&#xff1a; Back-off restarting failed container的Warning事件&#xff0c;一般是由于通过指定的镜像启动容器后&#xff0c;容器内部没有常驻进程&#xff0c;导致容器启动成功后…...

摸鱼文章1

1111111...

【设计模式】之适配器模式

系列文章目录 &#xff08;其他设计模式可以到 &#x1f449;&#x1f449;&#x1f449;&#xff09;设计模式_小杰不秃头的博客 &#x1f60a;&#x1f604;&#x1f61b; 前言 今天继续给大家介绍23种设计模式中的适配器模式&#xff0c;这个模式相比于其他模式比较好理解…...

Python轻量级Web框架Flask(13)—— Flask个人博客项目

0、前言: ★这部分内容是基于之前Flask学习内容的一个实战项目梳理内容,没有可以直接抄下来跑的代码,是学习了之前Flask基础知识之后,再来看这部分内容,就会对Flask项目开发流程有更清楚的认知,对一些开发细节可以进一步的学习。项目功能,通过Flask制作个人博客。项目架…...

电商技术揭秘营销相关系列文章合集(4)

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 文章目录 引言集合说明集合文章列表 引言 在数字化浪潮的推动下&#xff0c;电商行…...

LeetCode-2391. 收集垃圾的最少总时间【数组 字符串 前缀和】

LeetCode-2391. 收集垃圾的最少总时间【数组 字符串 前缀和】 题目描述&#xff1a;解题思路一&#xff1a;处理垃圾和路程单独计算。解题思路二&#xff1a;逆向思维&#xff0c;计算多走的路解题思路三&#xff1a;只记录&#xff0c;当前t需要计算几次 题目描述&#xff1a;…...

再有人说数字孪生大屏没有用,用这8条怼回去。

数字孪生大屏之所以受到欢迎&#xff0c;主要有以下几个原因&#xff1a; 实时数据可视化 数字孪生大屏可以将实时数据以直观的可视化形式展示出来&#xff0c;让用户能够一目了然地了解数据的状态和趋势。这样可以帮助用户更好地理解和分析数据&#xff0c;及时做出决策和调…...

蓝桥杯练习系统(算法训练)ALGO-946 Q神的足球赛

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 足球赛上&#xff0c;只见Q神如闪电般的速度带球时而左&#xff0c;时而右&#xff0c;时而前&#xff0c;时而后&#xff…...

【Android】Kotlin学习之Kotlin方法的声明和传参

方法声明 普通类的方法 静态类的方法 不需要构建实例对象, 可以通过类名直接访问静态方法 : NumUtil.double(1) companion object 伴生类的方法 使用companion object 在普通类里定义静态方法 参数 括号内传入方法 : 当参数是方法时, 并且是最后一个参数 , 可以使用括号外…...

微信小程序 17:小程序使用 npm 包和组件应用

目前&#xff0c;小程序中已经支持实用 npm 安装第三方包&#xff0c;从而提高小程序的开发效率&#xff0c;但是在小程序中使用 npm 包有三个限制&#xff1a; 不支持 Node.js内置库的包不支持依赖于浏览器内置对象的包不支持依赖于 C插件的包 Vant Weapp Vant Weapp是有赞…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...