JVM:强软弱虚四种引用

下面依次解释五种引用

一、强引用

把一个对象赋值给一个引用变量,就相当于把这个对象的强引用放到变量中。

只要对象可达, GC一定不会回收这个对象(A1)

二、软引用

当一个对象(A2)没有强引用时,发生GC后还是内存不够用就会选择再把软引用指向的对象(A2)释放

释放完A2后可以发现,软引用本身也是一个对象,当软引用指向的对象被回收,软引用对象自身会进入引用队列。

使用引用队列的原因在于: 释放完A2, A3后, C对象的强引用还指向软引用对象自身,需要靠引用队列找到同样需要释放的软引用。

三、弱引用

只要发生垃圾回收, 不管是不是内存充足都会把弱引用释放

具体细节和软引用差不多,不多描述。

四、虚引用

ByteBuffer分配一块直接内存,并把直接内存的地址给到虚引用对象Cleaner,当ByteBuffer没有强引用指向后,ByteBuffer可以直接释放

但是分配的直接内存无法被Java垃圾回收直接释放, 因此会把虚引用放到引用队列中,

后续会有线程Handler 去看是否有新入队的虚引用,如果有则直接释放

相关推荐
糖果店的幽灵1 分钟前
Spring AI 从入门到精通-Spring AI 是什么
java·人工智能·spring
XiYang-DING3 分钟前
【Java EE】TOCTOU
java·java-ee
.千余3 分钟前
【C++】 String 常用操作:增删查改 | 查找 | 截取 | IO
java·服务器·开发语言·c++·笔记·学习
长栎4 分钟前
面试官说你的单例线程不安全,你真能现场修好?
java
码云骑士6 分钟前
【Java基础】JDK安装常见问题教辅-从踩坑到排雷
java·开发语言
Sunia9 分钟前
《AgentX 专栏》09-MCP协议双向打通:让AgentX既能被Claude调用又能调度全球工具生态
java·架构
c238569 分钟前
C++ lambda 表达式详细介绍
开发语言·c++
wyu7296113 分钟前
SpringBoot八股的一些概念笔记
java·面试
艾莉丝努力练剑17 分钟前
【QT】界面优化:QSS
linux·运维·开发语言·网络·qt·计算机网络·udp
一只积极向上的小咸鱼17 分钟前
TOML、JSON、YAML、INI 配置文件格式总结
java·服务器·json