高级java每日一道面试题-2024年7月17日
面试官: java中都有哪些引用类型?
我回答:
-
强引用(Strong Reference)
- 描述:这是最常见和最直观的引用类型,我们通常在代码中创建的对象引用就是强引用。例如,
Object obj = new Object();。只要强引用存在,垃圾回收器就不会回收被引用的对象,即使系统内存不足。 - 特点:
- 对象在程序执行期间一直可访问。
- 只有当没有任何强引用指向该对象时,垃圾回收器才可能回收该对象。
- 应用场景:大多数的日常编程中创建的对象引用都属于此类, 如普通的对象引用和静态变量引用。
- 描述:这是最常见和最直观的引用类型,我们通常在代码中创建的对象引用就是强引用。例如,
-
软引用(Soft Reference)
- 描述:软引用是用来描述那些有用但并非必不可少的对象。当系统将要发生内存溢出异常之前,会把这些对象列入回收范围进行第二次回收,如果这次回收后仍然没有足够的内存,才会抛出内存溢出异常。
- 特点:
- 在内存压力下可能被回收。
- 用于实现内存敏感的高速缓存。
- 应用场景:适用于创建当内存紧张时可以被丢弃的缓存,如图像缓存、HTTP缓存等,可以在内存不足时释放一些非必要的对象,以避免内存溢出。
-
弱引用(Weak Reference)
- 描述:弱引用的对象拥有更低的生存期,当垃圾回收器工作时,无论当前内存空间是否充足,都会回收掉只被弱引用关联的对象。
- 特点:
- 在下一次垃圾回收时就会被回收。
- 通常与
ReferenceQueue结合使用,以便在对象被回收时接收通知。
- 应用场景:适用于对对象的非强制性维持,如缓存中不需要强引用的对象。
-
虚引用(Phantom Reference)
- 描述:虚引用也称为幽灵引用或者幻影引用,是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用获得一个对象实例。
- 特点:
- 创建虚引用关联一个对象时,可以使用
ReferenceQueue对象参数,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的队列中。
- 创建虚引用关联一个对象时,可以使用
- 应用场景:主要用来跟踪对象的垃圾回收过程,如实现对象的“finalization”替代方案,因为
finalize()方法的不确定性,虚引用可以作为一个更好的选择。管理直接内存映射的释放,如NIO中的DirectByteBuffer。
-
自定义引用类型(Custom Reference Type)
- 描述:除了上述四种常见的引用类型外,Java还允许开发者根据自己的需求定义自己的引用类型。
- 特性:自定义引用类型可以根据实际情况来管理对象的生命周期,实现更加灵活的引用策略。
- 使用场景:根据具体的应用场景和需求进行定制,以满足特定的内存管理需求。
每种引用类型都有其特定的使用场景,合理使用它们可以有效地管理应用程序的内存使用,特别是在需要考虑资源管理和垃圾回收策略的高性能或低资源环境中。在实际应用中,了解和掌握这些引用类型的工作机制,可以帮助开发者更好地优化代码,避免内存泄漏等问题。
相关文章:
高级java每日一道面试题-2024年7月17日
面试官: java中都有哪些引用类型? 我回答: 强引用(Strong Reference) 描述:这是最常见和最直观的引用类型,我们通常在代码中创建的对象引用就是强引用。例如,Object obj new Object();。只要强引用存在,…...
css中如何清除浮动
在CSS中,可以使用clear:both属性来清除浮动。以下是几种常见的清除浮动的方法: 使用clearfix类:在CSS中定义一个clearfix类,并将其应用于需要清除浮动的父元素上。 .clearfix::after {content: "";display: table;cle…...
【网络】tcp_socket
tcp_socket 一、tcp_server与udp_server一样的部分二、listen接口(监听)三、accept接收套接字1、为什么还要多一个套接字(明明已经有了个socket套接字文件了,为什么要多一个accept套接字文件?)2、底层拿到新…...
Live555源码阅读笔记:哈希表的实现
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
vue3创建vite项目
一、创建vue3 vite项目: 命令行创建:npm create vitelatest vue3-tdly-demo -- --template vue (1)先进入项目文件夹,cd vue3-tdly-demo (2)之后执行, npm install (3)最后运行,npm run dev 将main.js文件内容改成…...
Maven概述
目录 1.Maven简介 2.Maven开发环境搭建 2.1下载Maven服务器 2.2安装,配置Maven 1.配置本地仓库地址 2.配置阿里云镜像地址 2.3在idea中配置maven 2.4在idea中创建maven项目 3.pom.xml配置 1.项目基本信息 2.依赖信息 3.构建信息 4.Maven命令 5.打包Jav…...
Easyu中datagrid点击时获取所在行的数据
问题 双击单元格时,获取该行的记录内容 $(#list).datagrid({method: post,url: user/list,queryParams:{sex : "f",age : "18~25"},fitColumns: true,pageList: [ 5, 10, 15, 20 ],singleSelect: false,pagination: true,fit: true,rownumber…...
java项目中添加SDK项目作为依赖使用(无需上传Maven)
需求: 当需要多次调用某个函数或算法时,不想每次调用接口都自己编写,可以将该项目打包,以添加依赖的方式实现调用 适用于: 无需上线的项目,仅公司或团队内部使用的项目 操作步骤: 以下面这…...
区块链和数据要素融合的价值及应用
一、数据要素面临的关键障碍 在构建数据要素基石的过程中,首要任务是明确并解决产权架构的难题,特别是使用权的确立与流转机制的顺畅,此乃数字经济蓬勃发展的命脉所在。一个高效的数据流转体系对于激发数据潜能、加速经济发展及优化数据资源…...
以太坊的可扩展性危机:探索执行层的瓶颈
导读:以太坊执行层承担着交易处理、智能合约执行以及保持一致和安全状态的维护等工作。Fuel Labs 撰文解析了以太坊执行层的工作原理,及其在可扩展性方面的发展瓶颈和影响。 Fuel Labs: 执行是指在区块链上执行交易和执行状态更改所需的计算。此计算通常…...
静态解析activiti文本,不入库操作流程
说明: activiti本身状态存库,导致效率太低,把中间状态封装成一个载荷类,返回给上游,下次请求时给带着载荷类即可。 1.pom依赖 <dependency><groupId>net.sf.json-lib</groupId><artifactId>js…...
100个python的基本语法知识【上】
0. 变量和赋值: x 5 name “John” 1. 数据类型: 整数(int) 浮点数(float) 字符串(str) 布尔值(bool) 2. 注释: # 这是单行注释 ""…...
Python从0到100(四十四):读取数据库数据
前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...
ZLMRTCClient配置说明与用法(含示例)
webRTC播放视频 后面在项目中会用到通过推拉播放视频流的技术,所以最近预研了一下webRTC 首先需要引入封装好的webRTC客户端的js文件ZLMRTCClient.js 下面是地址需要的自行下载 http://my.zsyou.top/2024/ZLMRTCClient.js 配置说明 new ZLMRTCClient.Endpoint…...
nginx代理服务配置,基于http协议-Linux(CentOS)
基于http协议的nginx代理服务 1. 打开 Nginx 虚拟机80端口配置文件2. 添加代理配置3. 重启nginx服务 nginx代理缓存配置 1. 打开 Nginx 虚拟机80端口配置文件 Nginx 的默认80端口虚拟机配置文件通常位于/etc/nginx/conf.d/default.conf。 vim /etc/nginx/conf.d/default.con…...
Photos框架 - 自定义媒体资源选择器(数据部分)
引言 在iOS开发中,系统已经为我们提供了多种便捷的媒体资源选择方式,如UIImagePickerController和PHPickerViewController。这些方式不仅使用方便、界面友好,而且我们完全不需要担心性能和稳定性问题,因为它们是由系统提供的&…...
Spring Boot + Spring Cloud 入门
运行配置 java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.profiles.activetest --my1.age32 --debugtrue "D:\Program Files\Redis\redis-server.exe" D:\Program Files\Redis\redis.windows.conf "D:\Program Files\Redis\redis-cli.exe" &q…...
怎么使用动态IP地址上网
如何设置动态IP地址上网? 设置动态IP地址上网的步骤如下: 一、了解动态IP地址 动态IP地址是由网络服务提供商(ISP)动态分配给用户的IP地址,它会根据用户的需求和网络情况实时改变。相比于静态IP地址,动态…...
【源码+文档+调试讲解】智慧物流小程序的设计与实现
摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安全…...
QT:控件圆角设置、固定窗口大小
实现控件圆角度设置//使用的是setStyleSheet方法 //改变的控件是QTextEdit,如果你想改变其他控件,将QTextEdit进行更换 this->setStyleSheet("QTextEdit{background-color:#FFFFFF;border-top-left-radius:15px;border-top-right-radius:15px;bo…...
多模态扩展实验:OpenClaw+Qwen3-32B处理图片描述生成
多模态扩展实验:OpenClawQwen3-32B处理图片描述生成 1. 实验背景与动机 最近在探索如何将OpenClaw的自动化能力扩展到视觉领域。作为一个长期依赖文本交互的框架,OpenClaw能否结合多模态大模型处理图像任务?这引发了我的兴趣。恰好手头有台…...
从反射率到耐候性:5个关键参数教你像专业人士一样测试LED封装胶水
从反射率到耐候性:5个关键参数教你像专业人士一样测试LED封装胶水 在LED制造领域,封装胶水就像光学系统的"隐形工程师",它不仅要牢固固定芯片和荧光粉,更承担着光线管理的关键任务。一款优质的高反射率封装胶水…...
M9A智能助手:为《重返未来:1999》玩家解放时间的自动化解决方案
M9A智能助手:为《重返未来:1999》玩家解放时间的自动化解决方案 【免费下载链接】M9A 1999 小助手 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 在当今快节奏的游戏环境中,玩家常常需要在重复性日常任务上投入大量时间ÿ…...
FastAPI 2.0流式响应源码深度拆解,从Starlette 1.12到Pydantic v2.6兼容层的5处隐式await丢失点(生产环境已验证)
第一章:FastAPI 2.0流式响应架构演进与问题定位全景FastAPI 2.0 对流式响应(StreamingResponse)进行了底层重构,核心变化在于将 ASGI 生命周期与异步生成器的生命周期解耦,并引入更严格的流控契约。此前版本中常见的内…...
HunyuanVideo-Foley命令行教程:infer.py参数详解与批量音效生成脚本编写
HunyuanVideo-Foley命令行教程:infer.py参数详解与批量音效生成脚本编写 1. 环境准备与快速部署 在开始使用HunyuanVideo-Foley进行音效生成前,我们需要确保环境已经正确部署。本教程基于RTX 4090D 24GB显存显卡和CUDA 12.4优化环境。 1.1 镜像启动与…...
Phi-4-Reasoning-VisionGPU算力:双卡4090推理吞吐达12 token/s实测
Phi-4-Reasoning-VisionGPU算力:双卡4090推理吞吐达12 token/s实测 1. 项目概述 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具。该工具专为双卡RTX 4090环境优化,通过精心设计的架构和优化策略&a…...
Swift-All镜像入门:手把手教你快速部署,无需配置轻松上手
Swift-All镜像入门:手把手教你快速部署,无需配置轻松上手 想体验600大模型和300多模态模型的强大能力,却被复杂的安装配置劝退?Swift-All镜像就是为你准备的"开箱即用"解决方案。本文将带你从零开始,一步步…...
别再只用Canvas了!用Vue3组合式API优雅封装fabric.js的画笔与橡皮擦(附完整Hook代码)
重构Canvas交互:用Vue3组合式API封装fabric.js的工程化实践 在Web图形编辑领域,fabric.js以其强大的对象模型和交互能力成为许多开发者的首选。但当我们将它集成到Vue3项目中时,常常会遇到状态管理混乱、代码耦合度高的问题。本文将展示如何用…...
Repomix构建流程解析:TypeScript编译与打包的完整指南
Repomix构建流程解析:TypeScript编译与打包的完整指南 【免费下载链接】repomix 📦 Repomix (formerly Repopack) is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your cod…...
银河麒麟V4.0.2-sp4服务器到手后,这三步网络配置(IP/DNS/源)一个都不能少
银河麒麟V4.0.2-sp4服务器网络配置实战指南:从零搭建稳定运行环境 刚拿到一台预装银河麒麟V4.0.2-sp4操作系统的服务器时,许多运维工程师常会陷入"有设备却用不起来"的困境——无法远程连接、软件包安装失败、系统更新卡壳,这些问题…...
