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

模拟面试回答第十六问:引用类型

引用类型简介

引用类型分为强软弱虚四种类型,越往后GC约束越松。

强引用

强引用就是默认的引用类型,我们通常写的new Object就是强引用,只要不把栈中引用删除,堆中对应内存就不会被GC掉。

软引用

软引用一般指向图片缓存这类对象,内存充足时不容易被GC,不足时更容易被GC,JVM有一个参数叫做软引用空闲时间,单位是毫秒,那么判断软引用的存活时间,就是用堆剩余内存与软引用空闲时间相乘得到存活时间,在存活时间内发生GC不影响软引用,我举一个例子,比如堆有100MB,空闲时间默认是1000毫秒,那存活时间就是100s,如果项目的内存比较紧张,那可以将空闲时间设置为0,那GC一来就给图片缓存回收了,和弱引用一样。

弱引用

弱引用是只要GC就会回收的对象,比如ThreadLocal这种,每个线程都有一个ThreadLocalMap,Map中有一个Entry数组,ThreadLocal就是Entry数组的key,那为了避免比如线程池核心线程一直存活导致ThreadLocal也一直存活无法回收进而内存泄漏,于是将ThreadLocal设置为弱引用(其实是把Entry设置为弱应用,而ThreadLocal作为key是键值对的唯一标识,所以ThreadLocal实际是弱应用),当ThreadLocal的外部强引用消失,JVM就可以回收ThreadLocal内存了。至于会不会有线程没用完ThreadLocal就回收的情况,答案是不会的,因为只要ThreadLocal的外部强引用还在就说明线程还要用ThreadLocal,不在则说明用完了,就可以GC了,这样通过get(key)就找不到对应数据了,因为ThreadLocal给清空了。除此之外,value是强引用,用完后记得手动remove清理。

虚引用

虚引用也是只要GC就会回收,但是它是与引用队列配合使用的,JVM会把要被GC的虚引用对象加入到对应的引用队列中,程序通过监控得知有虚引用入队,就知道对应内存将被回收。
比如最经典的用法,DirectByteBuffer在NIO中分配直接内存,GC管理堆外内存:分配一块堆外内存,用一个堆内的DirectByteBuffer对象来引用它,关联一个Cleaner虚引用对象,当DirectByteBuffer被回收时,会把Cleaner放入引用队列,然后调用Cleaner的clean方法释放堆外内存。这样GC也能管理堆外内存。

除了强引用是默认的,其它都需要显示的继承XXXReference。

http://www.jsqmd.com/news/565312/

相关文章:

  • Web 可访问性最佳实践:构建人人可用的前端界面
  • 零成本搞定!异地访问OpenClaw最简方案:SSH端口映射+组网 IP
  • Hunyuan-MT-7B部署教程:像素语言传送门在Kubernetes集群中的高可用翻译服务编排
  • TradingAgents-CN:AI驱动的多智能体金融交易框架
  • Blender插件QuickSnap:提升三维对齐效率的技术方案
  • 从ULN2803芯片内部拆解,聊聊三极管“黄金搭档”达林顿管到底强在哪?
  • GanttProject:终极免费甘特图工具完整使用指南
  • 比迪丽LoRA模型应对403 Forbidden:模型API访问权限与鉴权策略配置
  • Qwen3.5-9B-AWQ-4bit多场景落地:零售货架图分析+缺货识别+SKU自动计数
  • 2026年全国排名前十的优质岩棉板厂家,专业的岩棉板价格合理 - 工业品牌热点
  • Android Camera开发避坑指南:HAL3多线程调试与性能优化全解析
  • 变分推断避坑指南:为什么你的VAE生成图片总是模糊?
  • 别再手动算进制了!Python binascii模块与CyberChef在线工具,搞定数据转换的两种姿势
  • 微信小程序分包实战:如何用独立分包提升首屏加载速度(附完整配置代码)
  • 清北博雅考研集训营:沉浸式封闭备考,为考研人铺就上岸之路
  • 从SP_PACK到SP_DIRECT:深入HP-Socket发送策略,为你的C++服务器选择最佳性能方案
  • 图图的嗨丝造相-Z-Image-Turbo自动化生图:Python脚本教程,轻松管理大量提示词与图片
  • 分析2026年纽扣电池品牌供应商口碑,选对品牌很重要 - 工业推荐榜
  • 如何选择充电桩品牌?2026年3月推荐评测口碑对比知名TOP10 - 品牌推荐
  • 面试官爱问的NP完全问题:用‘图着色’为例,讲清楚回溯法与启发式策略的优化思路
  • 【Java结构化并发调试实战指南】:20年专家亲授3大核心调试模式与5个致命陷阱避坑清单
  • 如何选择充电桩品牌?2026年3月推荐评测口碑对比知名十大 - 品牌推荐
  • 如何高效使用小米手表表盘制作工具:Mi-Create完整操作指南
  • 探讨2026年纽扣电池生产厂哪家口碑比较好 - myqiye
  • Vue3项目中实现无感ReCaptcha v3验证的实战指南
  • 5步搭建本地AI量化交易系统:Qbot全流程部署指南
  • RTX 5090到手,如何搞定DGL、PyTorch和PyG的‘三角恋’兼容问题?保姆级避坑指南
  • 终极指南:如何快速构建响应式React网格布局
  • 2025-2026年全球空气能热水器十大品牌推荐:TOP5口碑产品评测对比领先 - 品牌推荐
  • 什么是焦糖布丁理论?用 JTBD 做软件产品设计的四步法