JVM 如何判断对象是否可回收

垃圾回收器在对堆进行回收之前,首先需要确定哪些对象是可回收的。常用的算法有两种,引用计数算法和根搜索算法。

1. 引用计数算法

引用计数算法给每个对象添加引用计数器,用于记录对象被引用的计数,引用计数为 0 的对象即为可回收的对象。

虽然引用计数算法的实现简单,判定效率也很高,但是引用计数算法无法解决对象之间循环引用的情况。如果多个对象之间存在循环引用,则这些对象的引用计数永远不为 0,无法被回收。因此 Java 语言没有使用引用计数算法。

2. 根搜索算法(也称,可达性分析法)

主流的商用程序语言都是使用根搜索算法判断对象是否可回收。根搜索算法的思路是,从若干被称为 GC Roots 的对象开始进行搜索,不能到达的对象即为可回收的对象。

在 Java 中,GC Roots 一般包含下面几种对象:

  • 虚拟机栈中引用的对象;
  • 本地方法栈中的本地方法引用的对象;
  • 方法区中的类静态属性引用的对象;
  • 方法区中的常量引用的对象。
相关推荐
啊我不会诶6 分钟前
2024北京市赛补题
c++·算法
shehuiyuelaiyuehao6 分钟前
算法13,滑动窗口,水果成篮
算法·哈希算法·散列表
智慧物业老杨7 分钟前
物业数智化转型实战:从单一服务到综合解决方案的技术落地路径
人工智能·算法·ai
运气好好的10 分钟前
mysql数据库日志文件过大如何清理_定期备份与重置日志文件
jvm·数据库·python
夏末蝉未鸣0110 分钟前
Sort-Merge Join【排序连接算法】详解(python代码实现,以FULL JOIN为例)
数据结构·算法
tjl521314_2117 分钟前
01C++ 分离编译与多文件编程
前端·c++·算法
_日拱一卒19 分钟前
LeetCode:23合并K个升序链表
java·数据结构·算法·leetcode·链表·职场和发展
lee_curry20 分钟前
第三章 jvm中的对象和执行引擎
java·jvm·执行引擎
哆啦刘小洋21 分钟前
【LeetCode每日一题】:2033(贪心+快速排序魔改)
算法·leetcode
WolfGang00732124 分钟前
代码随想录算法训练营 Day48 | 图论 part06
算法·图论