目录

软引用

相对于强引用是一种比较弱的引用关系,如果一个对象只有软引用关联到它,当程序内存不足时,就会将软引用的数据进行回收。

在 JDK1.2 版之后提供了 SoftReference 类来实现软引用,软引用常用于缓存中。

Untitled

Untitled

软引用案例

堆内存只有 200M:

Untitled

打印结果

打印结果

软引用的回收队列机制

软引用中的对象在内存不足的时候会被回收,而 SoftReference 对象本身也需要被回收。如何知道哪些 SoftReference 对象需要回收呢?

软引用提供了一套队列机制:

  1. 软引用创建时,通过构造器传入引用队列
  2. 在软引用中包含的对象被回收时,该软引用对象会被放入引用队列
  3. 通过代码遍历引用队列,将 SoftReference 的强引用删除

Untitled

软引用的使用场景