对象引用类型之软引用和弱引用(学习笔记)

  提到弱引用和软引用,想到内存的动态分配与内存回收。在Java语言中,有的区域的内存分配和回收都具备确定性(比如:程序计数器、虚拟机栈和本地方法栈),它们不需要考虑过多的回收问题;而有的区域的内存分配和回收都是动态的(比如,Java堆和方法区、一个接口的多个实现类需要的内存可能不一样)。垃圾收集器对堆进行回收的条件取决于指向该对象的引用类型。

  Java中有如下四种类型的引用:
  ①强引用(Strong Reference)
  抛出 OutOfMemoryError也不会回收被强引用关联的对象。
  ②软引用(SoftReference)
  如果一个对象只具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了(在虚拟机抛出 OutOfMemoryError 之前),就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。
  软引用对象最常用于实现内存敏感的缓存。
  ③弱引用(WeakReference)
  只具有弱引用的对象拥有更短暂的生命周期。强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前,一经发现,不管当前内存空间足够与否,都会回收它的内存。
  例如:WeakHashMap类,它的key 采用了弱引用的方式,即以弱键实现的基于哈希表的 Map。在WeakHashMap中,当某个键不再正常使用时,将自动移除其条目,因此能够节约存储空间,可用来缓存那些非必须存在的数据。
  ④虚引用(PhantomReference)
  形同虚设。
  总之,合理的使用引用才可以给垃圾回收器助力。

posted @   江河湖泊  阅读(574)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示