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

【Java面试笔记:基础】4.强引用、软引用、弱引用、幻象引用有什么区别?

1. 引用类型及其特点

强引用(Strong Reference):

  • 定义:最常见的引用类型,通过new关键字直接创建。
  • 回收条件:只要强引用存在,对象不会被GC回收。
  • 示例:
    Object obj = new Object(); // 强引用
    
  • 特点:
    • 强引用是导致内存泄漏的常见原因(如未及时置为null)。
    • 手动断开引用:obj = null;

软引用(Soft Reference):

  • 定义:相对强引用弱化了一些的引用。通过SoftReference类实现,用于描述可有可无的对象。
  • 回收条件:只有在 JVM 认为内存不足时,才会试图回收软引用指向的对象。JVM 会确保在抛出 OutOfMemoryError 之前,清理软引用指向的对象。
  • 应用场景:内存敏感的缓存(如图片缓存、计算结果缓存)。如果还有空闲内存,可以暂时保留缓存,当内存不足时清理掉,避免耗尽内存。
  • 示例:
    SoftReference<byte[]> softRef = new SoftReference<>(new byte[1024 * 1024]);
    byte[] data = softRef.get(); // 可能返回null(若已被回收)
    
  • 特点:
    • 适合保存非必须但有用的数据,避免频繁重建。
    • 可通过ReferenceQueue追踪被回收的对象。

弱引用(Weak Reference):

  • 定义:通过WeakReference类实现,比软引用更弱。不能使对象豁免垃圾收集,仅提供一种访问在弱引用状态下对象的途径。
  • 回收条件:垃圾收集器在扫描时,无论内存是否充足,一旦发生GC,对象就会被回收。
  • 适用场景:非强制性的映射关系和缓存实现。例如,维护一种没有特定约束的关系,如果试图获取时对象还在,就使用它,否则重现实例化(如WeakHashMap中的键)。
  • 示例:
    WeakReference<Object></
http://www.xdnf.cn/news/1123.html

相关文章:

  • 【c++深入系列】:万字string详解(附有sso优化版本的string模拟实现源码)
  • rpm命令详解
  • java的反编译命令
  • 小小矩阵设计
  • 重学React(一):描述UI
  • 【Python进阶】数据可视化:Matplotlib从入门到实战
  • 解码思维链:AI思维链如何重塑人类与机器的对话逻辑
  • 解决 MongoDB 查询中的 `InvalidMongoDbApiUsageException` 错误
  • 密码学货币混币器详解及python实现
  • ASP.Net Web Api如何更改URL
  • 【前端】【业务逻辑】【面试】 大数据表格的表单校验导致性能问题,如何优化?
  • 【Nova UI】七、SASS 全局变量体系:组件库样式开发的坚固基石
  • 【Unity MetaQuest】Unity6使用Meta all in one sdk打包安装到Quest2设备后,运行后闪退或者一直卡在3个点上解决办法
  • ViewBS 的工作流程
  • GitHub 常见高频问题与解决方案(实用手册)
  • 【质量管理】“武藏曲线”和“微笑曲线”的差异
  • 【第16届蓝桥杯C++C组】--- 2025图形
  • CentOS 6.9 安装 Zabbix 3.0 详细教程
  • uniapp Vue2升级到Vue3,并发布到微信小程序的快捷方法
  • CSS学习笔记
  • Ubuntu数据连接访问崩溃问题
  • 百度 Al 智能体心响 App 上线
  • \r在C语言中是什么意思(通俗易懂,附带实例)
  • C语言高频面试题——嵌入式系统中中断服务程序
  • Python基于语音识别的智能垃圾分类系统【附源码、文档说明】
  • 如何批量为多个 Word 文档添加水印保护
  • C++手撕STL-其叁
  • MongoDB 集合名称映射问题
  • 【Lua】Lua 入门知识点总结
  • Debian 12.10 root 登录失败,两步解决!