强应用-弱引用-虚引用-软引用

强引用

常见的对象赋值引用,不为空,则不会被垃圾回收器回收直到内存溢出

demo

ini 复制代码
/**
 * 强引用
 */
@Test
public void dd(){
    Object o = new Object();
    System.gc();
    assert o != null;
    o = null;
    assert o == null;
}

GC可达性检测

软引用

次于强引用,但比强引用更弱,不会被垃圾回收器回收,但内存溢出时,会被回收
适合缓存,比如图片缓存,文件缓存,数据库连接缓存,缓存数据,图片等

typescript 复制代码
    /**
     * 软引用
     */
    @Test
    public void dd1(){
        SoftReference<Object> o = new SoftReference(new Object());
        assert o != null;
    }

弱引用

弱引用,比软引用更弱只能生存到下一次垃圾收集发生之前
ThreadLocalMap 源码结构

scala 复制代码
    static class ThreadLocalMap {

        /**
         * The entries in this hash map extend WeakReference, using
         * its main ref field as the key (which is always a
         * ThreadLocal object).  Note that null keys (i.e. entry.get()
         * == null) mean that the key is no longer referenced, so the
         * entry can be expunged from table.  Such entries are referred to
         * as "stale entries" in the code that follows.
         */
        static class Entry extends WeakReference<ThreadLocal<?>> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal<?> k, Object v) {
                super(k);
                value = v;
            }
        }



    /**
     * 弱引用
     */
    @Test
    public void dd2(){
        WeakReference<Object> o = new WeakReference(new Object());
        assert o != null;
    }

虚引用

资源回收回调

typescript 复制代码
    /**
     * 虚引用
     */
    @Test
    public void dd3(){
        // 创建一个引用队列
        ReferenceQueue<Object> queue = new ReferenceQueue<>();
        

    }
相关推荐
椰椰椰耶20 分钟前
[SpringCloud][14]OpenFeign参数传递方法
后端·spring·spring cloud
onething36534 分钟前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 3 —— 消息表设计 + 级联删除 + 事务管理
人工智能·后端
荣江36 分钟前
Hermes Agent 代码仓库打包工具使用指南(repomix-rs 高性能版)
后端
王某某人39 分钟前
LangChain4j 入门:Java 程序员的第一个 AI 对话程序
人工智能·后端
码农刚子44 分钟前
从零开始:在 Windows 服务器上部署 Node.js 项目(小白实战教程)
后端·node.js
Cache技术分享44 分钟前
435. Java 日期时间 API - Clock 灵活获取当前时间
前端·后端
浩子coding1 小时前
通过 Spring AI Alibaba 源码,看如何玩转 ReAct 智能体范式
人工智能·后端
星浩AI1 小时前
合规项目大模型如何部署?硬件选型 + vLLM/LMDeploy 实战
pytorch·后端·llm
摇滚侠1 小时前
SpringMVC 入门到实战 DispatcherServlet 源码解读 92-95
java·后端·spring·maven·intellij-idea
码不停蹄的玄黓3 小时前
Spring Bean 生命周期
java·后端·spring