【JVM】判断对象能否回收的两种方法:引用计数算法,可达性分析算法

1、引用计数算法

给对象添加一个引用计数器,当该对象被其它对象引用时计数加一,引用失效时计数减一,计数为0时,可以回收。

特点:占用了一些额外的内存空间来进行计数,原理简单,判定效率高

引用计数法简单易实现,但无法解决循环引用的问题

(这种引用情况下,A和B的计数器始终大于等于1。)

应用:引用计数法适用于对象生命周期较短、没有循环引用的场景,

2、可达性分析算法

基本思路是通过根对象(GC Roots)作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为引用链(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连,或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。

可以通过引用链到达"根"的对象存活,不可到达的对象可以回收。(这个"根" 名为GC Roots)

特点:能够正确处理循环引用,但实现相对复杂,需要递归遍历对象图。

应用:可达性分析适用于长生命周期、存在循环引用的场景,

相关推荐
coderSong25682 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
Mr_Air_Boy3 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
豆沙沙包?4 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
年老体衰按不动键盘4 小时前
快速部署和启动Vue3项目
java·javascript·vue
咖啡啡不加糖4 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
liuyang-neu4 小时前
java内存模型JMM
java·开发语言
int型码农4 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT5 小时前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面5 小时前
C++刷题:日期模拟(1)
c++·学习·算法
刘 大 望5 小时前
数据库-联合查询(内连接外连接),子查询,合并查询
java·数据库·sql·mysql