【无标题】

引用类型简介

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

强引用

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

软引用

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

弱引用

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

虚引用

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

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

相关推荐
鬼手点金4 分钟前
opencode-crawl4ai使用建议
java·开发语言·人工智能·python·机器学习
专业程序开发源18 分钟前
springboot校园志愿者管理系统28562-计算机课程设计、毕业设计
java·spring boot·后端·python·django·php·课程设计
thefool11226622 分钟前
多线程 2
java
谢亮_vipxieliang23 分钟前
Go select 多路复用:从语法到实战的完整指南
开发语言·后端·golang
daidaidaiyu10 小时前
ThingsBoard 集群的核心逻辑源码分析
java
2601_9628857210 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
爱吃奥利奥_wen11 小时前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
我可能是个假开发11 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong11 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
WL学习笔记12 小时前
日期类(C++)
开发语言·c++·日期类实现