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

【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></

相关文章:

  • LangChain 核心模块学习:Chains
  • 配置spark
  • 嵌入式:ARM公司发展史与核心技术演进
  • 基于函数下降趋势的FISTA算法
  • el-form里面的input输入框按回车自动刷新页面的问题
  • Hyper-V 管理工具
  • 12.5/Q1,GBD高分文章解读
  • 深度强化学习 pdf 董豪| 马尔科夫性质,马尔科夫过程,马尔科夫奖励过程,马尔科夫决策过程
  • 香港免费云服务器申请教程,配置4核8G
  • 制作一款打飞机游戏17:敌人
  • G1 人形机器人软件系统架构与 Python SDK
  • SystemV-消息队列与责任链模式
  • Discuz!+DeepSeek:传统论坛的智能化蜕变之路
  • 鸿蒙移动应用开发--渲染控制实验
  • C++异步操作 - future async package_task promise
  • Vue项目依赖注入的使用
  • 深度学习模型搭建的基础原理详细介绍
  • C++学习笔记(三十六)——STL之排序算法
  • Java中内部类
  • 电脑硬盘丢失怎么找回?解决硬盘数据恢复的2种方法
  • 金发科技去年净利增160%,机器人等新领域催生材料新需求
  • 荣膺劳伦斯大奖实至名归,杜普兰蒂斯的传奇没有极限
  • 民政部:从未设立或批准设立“一脉养老”“惠民工程”项目,有关App涉嫌诈骗
  • 规模再创新高,超百款新车首发!上海车展明日开幕
  • 清华成立教育学院:加快高层次人才培养、加强教育学科建设
  • 2025“上海之夏”向全球邀约,首批城市定制活动集中亮相