JVM:强软弱虚四种引用

下面依次解释五种引用

一、强引用

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

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

二、软引用

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

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

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

三、弱引用

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

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

四、虚引用

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

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

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

相关推荐
我命由我123453 分钟前
Spring Cloud - Spring Cloud 负载均衡(Ribbon 负载均衡概述、Ribbon 使用)
java·后端·spring·spring cloud·ribbon·java-ee·负载均衡
酷柚易汛智推官3 分钟前
基于MemU的自主代理记忆管理系统:技术解析与实践
java·安全·架构
研究司马懿5 分钟前
【GitOps】Argo CD app of apps
大数据·开发语言·elasticsearch·搜索引擎·云原生·argocd·gitops
懒鸟一枚28 分钟前
Java 常见加密算法用法详解
java·开发语言
嵌入式-老费29 分钟前
Easyx图形库应用(lua中的函数回调)
开发语言·lua
oak隔壁找我31 分钟前
SpringBoot 开发必备基础工具类实现(纯JWT认证,无SpringSecurity)
java·后端
张较瘦_31 分钟前
Springboot | 初识Springboot 从“手动做饭”到“点外卖”的编程革命
java·spring boot·后端
oak隔壁找我34 分钟前
SpringBoot 整合 Minio 和 FastDFS 实现分布式文件存储
java·后端
喜欢吃燃面1 小时前
算法中的链表结构
开发语言·c++·学习·算法
十五年专注C++开发1 小时前
Fruit框架:C++依赖注入解决方案
开发语言·c++·依赖注入·fruit框架