当前位置: 首页 > article >正文

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

1、引用计数算法

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

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

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

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

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

2、可达性分析算法

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

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

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

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


http://www.kler.cn/news/303477.html

相关文章:

  • 神经网络多层感知器异或问题求解-学习篇
  • mysql数据库如何开启binlog日志
  • cesium.js 入门到精通(7)
  • 修改centos7系统语言en_US.UTF-8为中文zh_CN.UTF-8
  • 高防服务器的优势与劣势分析
  • 【LLM:Fan】
  • 踩坑记:Poco库,MySql,解析大文本的bug
  • 递归、排序、二分查找(C语言实现)
  • mybatis与concat实现模糊查询、mybatis中模糊查询concat传入参数为空时的解决方法
  • nacos安装使用调优及面试题分享
  • Apple发布会都有哪些亮点?如何在苹果手机和电脑上录制屏幕?
  • MATLAB默认工作路径修改
  • 串口通信数据包介绍和包结构定义实例
  • 【Echarts】vue3打开echarts的正确方式
  • real, dimension(3) :: rho1 和 real :: rho1(3) 的区别
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(1)
  • element表格合并列数据相同合并单元格
  • 【Flutter 面试题】 无需上下文进行路由跳转原理是怎么样的
  • Python用MarkovRNN马尔可夫递归神经网络建模序列数据t-SNE可视化研究
  • 医疗报销|基于springboot的医疗报销系统设计与实现(附项目源码+论文+数据库)
  • RocketMQ 集群搭建详细指南
  • F12抓包10:UI自动化 - Elements(元素)定位页面元素
  • 【devops】devops-git之git分支与标签使用
  • Kubernetes 容器与镜像管理
  • 五、Django 路由配置
  • 如何编写ChatGPT提示词
  • LabVIEW中EPICS客户端/服务端的测试
  • 数据库系统概论(3,4)
  • 【网络安全】漏洞挖掘之会话管理缺陷
  • Layout 布局组件快速搭建