当前位置: 首页 > 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种方法
  • 解放日报:让算力像“水电煤”赋能千行百业
  • 人民日报钟声:国际社会应共同维护科学溯源的正确方向
  • 湖北鄂州通报4所小学学生呕吐腹泻:供餐企业负责人被采取强制措施
  • 山西太原一居民小区发生爆炸,应急管理部派工作组赴现场
  • 为治理商家“卷款跑路”“退卡难”,预付式消费司法解释5月起实施
  • 海口市政协党组成员、秘书长、机关党组书记汪娟被查