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

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

1. 引用计数算法

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

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

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

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

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

  • 虚拟机栈中引用的对象;
  • 本地方法栈中的本地方法引用的对象;
  • 方法区中的类静态属性引用的对象;
  • 方法区中的常量引用的对象。
相关推荐
u01092727117 小时前
C++中的策略模式变体
开发语言·c++·算法
2501_9418372617 小时前
停车场车辆检测与识别系统-YOLOv26算法改进与应用分析
算法·yolo
六义义18 小时前
java基础十二
java·数据结构·算法
四维碎片18 小时前
QSettings + INI 笔记
笔记·qt·算法
Tansmjs18 小时前
C++与GPU计算(CUDA)
开发语言·c++·算法
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大19 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
独自破碎E19 小时前
【优先级队列】主持人调度(二)
算法
weixin_4454766819 小时前
leetCode每日一题——边反转的最小成本
算法·leetcode·职场和发展
笨手笨脚の19 小时前
深入理解 Java 虚拟机-03 垃圾收集
java·jvm·垃圾回收·标记清除·标记复制·标记整理
打工的小王20 小时前
LeetCode Hot100(一)二分查找
算法·leetcode·职场和发展