现在的管理系统里,为了提升性能,往往会加入缓存,将部分常用的数据缓存到内存中,这样用于在访问时,会直接从内存中取出,降低数据库的访问量,加快用户获取数据的速度。将数据加入到hashmap中,如果内存空间足够,那么我们可以通过缓存来提升性能,但万一内存空间不够,我们可以依次释放一些内存,释放后不会影响业务流程,最多就是降低些性能。
对比一下,如果我们这里不用软应用,而是用强引用来缓存,由于不知道用户何时点击,我们还无法得知什么时候可以撤销这些对象上的强引用,或者即使我们引入了一套缓存淘汰流程,但这就是额外的工作了,这就没刚才使用“软引用“那样方便了。
1、软引用hashmap工具类
public class SoftHashMap<K, V> extends HashMap<K, V> {
/**
* queue,软引用标记队列
* <p>
* ★★★★★★★ 解释 ★★★★★★★
* 当SoftNode中 Value 被回收时,SoftNode 对象会被放入 queue中,以表示当前SoftNode 中的Value不存在
* 对我们的使用好处就是,我们读取 queue 队列,取出 SoftNode对象,取出其内部的 Key
* 以便于 temp 通过 key remove
*/
private ReferenceQueue<V> queue;
/**
* 真正的map对象
* 1、temp 内部 封装的 Node 强引用 K 和 SoftNode
* 2、SoftNode 内部强引用K,