JVM:强软弱虚四种引用

下面依次解释五种引用

一、强引用

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

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

二、软引用

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

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

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

三、弱引用

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

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

四、虚引用

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

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

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

相关推荐
每天吃饭的羊4 分钟前
媒体查询
开发语言·前端·javascript
luming-024 分钟前
java报错解决:sun.net.utils不存
java·经验分享·bug·.net·intellij-idea
北海有初拥12 分钟前
Python基础语法万字详解
java·开发语言·python
alonewolf_9916 分钟前
Spring IOC容器扩展点全景:深入探索与实践演练
java·后端·spring
super_lzb18 分钟前
springboot打war包时将外部配置文件打入到war包内
java·spring boot·后端·maven
毛小茛20 分钟前
芋道管理系统学习——项目结构
java·学习
阿里嘎多学长24 分钟前
2026-01-02 GitHub 热点项目精选
开发语言·程序员·github·代码托管
天远云服33 分钟前
Go语言高并发实战:集成天远手机号码归属地核验API打造高性能风控中台
大数据·开发语言·后端·golang
东北小狐狸-Hellxz36 分钟前
解决java客户端连接ssh失败问题
java·网络·ssh
悟能不能悟36 分钟前
HttpServletRequest request获取整个headers有什么方法
java