首页 > 其他分享 >软引用

软引用

时间:2024-12-25 17:46:29浏览次数:2  
标签:get softReference cache 回收 引用 key

定义
软引用(Soft Reference)是 Java 中引用类型的一种。它是一种相对较弱的引用,在 Java 的垃圾回收机制(Garbage Collection,GC)中具有特殊的处理方式。
用途
软引用主要用于缓存场景,当内存空间足够时,垃圾回收器不会回收软引用所指向的对象;只有当内存不足时,才会回收这些对象,以释放内存空间。这使得它非常适合用来缓存那些在内存紧张时可以被牺牲掉的数据。

  

/**
 * 当你的老板抠抠搜搜,不肯加机器还要提升优化效率时可以试用【一般不用,第三方缓存工具,redis,mongo,eachher不多的是选择吗】
 */
public class T {
    private Map<String, SoftReference<Object>> cache = new HashMap<>();
    private ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();
    
    public void put(String key, Object value) {
        // 清理已经被回收的软引用
        cleanUp();
        SoftReference<Object> softReference = new SoftReference<>(value, referenceQueue);
        cache.put(key, softReference);
    }
    
    public Object get(String key) {
        SoftReference<Object> softReference = cache.get(key);
        if (softReference!= null) {
            return softReference.get();
        }
        return null;
    }
    
    private void cleanUp() {
        Reference<? extends Object> reference;
        while ((reference = referenceQueue.poll())!= null) {
            cache.values().remove(reference);
        }
    }
  
}

  

标签:get,softReference,cache,回收,引用,key
From: https://www.cnblogs.com/wangbiaohistory/p/18631054

相关文章

  • 强引用
    //每一次创建一个对象都是强引用()也就是普通的引用Objectobject=newObject();publicclassTTT{//实际情况不需要重写,也不必要重写,java有垃圾回收器帮助回收C,C++需要回收。@Overrideprotectedvoidfinalize()throwsThrowa......
  • Java中的五种引用方式底层详解
        在GC算法的可达性算法中描述的对象引用,一般指的是强引用,即是GCRoot对象对普通对象有引用关系,只要这层关系存在,普通对象就不会被回收,而在Java中一共有五种引用关系。目录 强引用 (Strong Reference)软引用 (SoftReference)使用软引用实现简单缓存 一个实......
  • uniapp中组件的引用、组件之间数据的传递
    一、组件的引用1.首先有一个写好的组件cli-header.vue 目录为/pages/client/client-components/cli-header.vue2.在需要调用的页面编写代码<template><cliHeader/></template><script>importcliHeaderfrom'@/pages/client/client-components/cli-header.vu......
  • 11. Java的四种引用,强弱软虚
    强引用强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式:Stringstr=newString("str");软引用软引用在程序内存不足时,会被回收,使用方式:点击查看代码//注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,//这里的软引用指的......
  • wps添加引用和参考文献的方法
    文章目录1.找到目标参考文献先复制再文档内部2.引用文献具体操作2.1.找到你要引用的位置(如下图)2.2点击引用--插入尾注2.3.复制1中的目标文献到此处2.4选中序号调整大小3.验证可行性1.找到目标参考文献先复制再文档内部前面的需要可以不需要2.引用文献具体操作2......
  • 若引用JS文件,或者CSS文件,应直接写入HTML文件
    <scriptsrc="https://cdn.bootcdn.net/ajax/libs/quill/2.0.2/quill.js"></script><linkhref="https://cdn.bootcdn.net/ajax/libs/quill/2.0.2/quill.snow.css"rel="stylesheet"><script>/*!Forlicense......
  • 论文引用 | 如何将正文引用批量设置上标?
    本方法适用对象:请注意,本方法针对下图所示论文引用格式:①外部:半角中括号②内部:数字,数字与半角逗号的组合,数字与连接符号的组合,数字、半角逗号与连接符号的组合主要步骤:1.打开高级查找2.在查找内容中输入\[[0-9,-]{1,}\],并勾选搜索选项中的“使用通配符”3.......
  • 引用 | 如何将正文引用批量设置上标?
    本方法适用对象:请注意,本方法针对下图所示论文引用格式:①外部:半角中括号②内部:数字,数字与半角逗号的组合,数字与连接符号的组合,数字、半角逗号与连接符号的组合主要步骤:1.打开高级查找2.在查找内容中输入\[[0-9,-]{1,}\],并勾选搜索选项中的“使用通配符”3.点击在以下......
  • Dubbo 3.x源码(27)—Dubbo服务引用源码(10)subscribeURLs订阅应用级服务url
    基于Dubbo3.1,详细介绍了Dubbo服务的发布与引用的源码。上文我们学习了Dubbo3的应用级服务发现订阅refreshServiceDiscoveryInvoker方法的源码,下面我们将会学习应用级服务发现订阅后半部分的源码,即在获取到服务应用名之后,通过subscribeURLs方法进行应用级别的服务url订阅......
  • 获取任意一个进程的共享内存的fd对应的资源,增加引用,实现数据的接管——包含非export的
    一、背景在之前的 memfd配合跨进程传输fd的例子及原理-CSDN博客博客里,我们讲了跨进程通过socket传递fd的底层实现原理,并且给了一个例子来替代socket传输和转换部分的逻辑,直接使用底层fd和file的接口来通过模块ko来实现跨进程的fd的转换和重新映射。这篇博客里,我们继续fd的......