JVM中判定对象是否回收的的方法

引用计数法

引用计数法是一种垃圾回收(Garbage Collection)算法,用于自动管理内存中的对象。在引用计数法中,每个对象都有一个关联的引用计数器,用于记录对该对象的引用数量。

当一个新的引用指向对象时,该对象的引用计数器加1;当一个引用不再指向对象时,对象的引用计数器减1。当引用计数器的值为0时,说明该对象没有被引用,即可被认定为垃圾对象,可以被垃圾回收器回收内存。

引用计数法的优点是实时性强,一旦没有引用指向对象,就可以立即释放内存。

缺点:

不能解决循环依赖

循环依赖:两个对象相互依赖,这样计数器就不会清零

可达性分析算法

Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象

可达性分析算法的基本思想是从一组称为"根"的起始对象开始,递归地遍历对象引用链,标记所有被访问到的对象为存活对象,而未被标记的对象则被认定为垃圾对象,可以被垃圾回收器回收内存。

在JVM中,根对象通常包括以下几种:

  1. 本地变量表中引用的对象:包括当前执行的方法中使用的对象引用。
  2. 静态变量中引用的对象:即类的静态字段所引用的对象。
  3. 活动线程中的对象:即正在执行的线程中的对象。
  4. JVM内部的引用:例如常量池中的引用、类静态引用等。

通过从根对象开始,可达性分析算法会遍历对象的引用链,找到所有可达对象。未被访问到的对象则被认定为垃圾对象。

可达性分析算法的优点是能够准确地判断对象是否存活,避免了引用计数法中循环引用的问题。然而,可达性分析算法的缺点是需要进行全局扫描,可能会造成一定的性能开销。

相关推荐
m0_733565463 分钟前
mysql数据库执行全量备份影响业务_利用xtrabackup实现无锁备份
jvm·数据库·python
2401_880071408 分钟前
golang如何编写DNS查询工具_golang DNS查询工具编写大全
jvm·数据库·python
该昵称用户已存在18 分钟前
从成本中心到价值引擎:MyEMS 开源系统激活企业能源数据资产
java·后端·struts
Hello.Reader18 分钟前
算法基础(十二)——主方法:快速求解常见递归式
算法
隐退山林18 分钟前
JavaEE进阶:SpringBoot配置文件
java·spring boot·java-ee
m0_5913647320 分钟前
JavaScript中Object-hasOwn作为现代安全检测方案
jvm·数据库·python
m0_6245785923 分钟前
html标签怎么避免标签嵌套错误_div不能放在p内原因【详解】
jvm·数据库·python
阿维的博客日记30 分钟前
求解深分页问题,last pk适合什么情况
java·mysql·深分页
小O的算法实验室38 分钟前
2026年IEEE TITS,面向按需外卖配送调度的特定问题知识与基于学习元启发式算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
加勒比海带6640 分钟前
目标检测算法——农林行业数据集汇总附下载链接【Plant】
大数据·图像处理·人工智能·算法·目标检测