【无标题】

引用类型简介

引用类型分为强软弱虚四种类型,越往后约束越松。

强引用

强引用就是默认的引用类型,我们通常写的new Object就是强引用,只要不把栈中引用删除,堆中对应内存就不会被GC掉。

软引用

软引用一般指向图片缓存这类在内存充足时不被GC,但是内存不足时将图片缓存这类软引用清理掉,如果清理了图片缓存之后内存还是不足,就爆发OOM。

弱引用

弱引用是只要GC就会回收的对象,比如ThreadLocal这种,为了避免线程池核心线程一直存活导致ThreadLocal也一直存活进而内存泄漏,于是将ThreadLocal设置为弱引用,这样每次GC都会将ThreadLocal清理,除此之外,ThreadLocal是ThreadLocalMap的key,Map还有value存储值,这个value是强引用,那么当用完后记得手动remove清理。

虚引用

虚引用也是只要GC就会回收,但是它是与引用队列配合使用的,当某个虚引用对象被GC时,会通知引用队列,就是一个通知,这样引用队列就知道这个虚引用对象内存被回收了,比较适合堆外内存的释放,比如某块内存加上虚引用关联某堆外内存,当这块虚引用对象内存被回收时,通知引用队列释放堆外内存。

除了强引用是默认的,其它都需要显示的继承XXXReference。

相关推荐
云烟成雨TD21 小时前
Spring AI Alibaba 1.x 系列【69】Token 用量统计
java·人工智能·spring
JAVA96521 小时前
JAVA面试-并发篇 03-使用synchronized doublecheck实现单例有什么坑
java·单例模式·面试
在繁华处21 小时前
Java从零到熟练(四):面向对象基础
java·开发语言
Unbelievabletobe1 天前
解决了股票api接口盘后数据更新慢的问题
大数据·开发语言·python
不会C语言的男孩1 天前
C++ Primer 第2章:变量和基本类型
开发语言·c++
小江的记录本1 天前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处1 天前
Java从零到熟练(三):流程控制
java·开发语言·python
唐青枫1 天前
Java Optional 实战指南:优雅处理空值与链式转换
java
一起学开源1 天前
一文读懂 ReAct 范式:让 AI Agent 真正学会“思考+行动“
java·javascript·react.js·ecmascript·react·alibaba·智能体开发
云泽8081 天前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法