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

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

1. 引用计数算法

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

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

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

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

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

  • 虚拟机栈中引用的对象;
  • 本地方法栈中的本地方法引用的对象;
  • 方法区中的类静态属性引用的对象;
  • 方法区中的常量引用的对象。
相关推荐
二哈不在线11 小时前
代码随想录二刷之“贪心算法”~GO
算法·贪心算法·golang
快去睡觉~11 小时前
力扣416:分割等和子集
数据结构·c++·算法·leetcode·职场和发展·动态规划
仙俊红11 小时前
LeetCode每日一题,2025-9-5
算法·leetcode·职场和发展
阿维的博客日记11 小时前
LeetCode 240: 搜索二维矩阵 II - 算法详解(秒懂系列
算法·leetcode·矩阵
小O的算法实验室11 小时前
2024年ASOC SCI2区TOP,有效离散人工蜂群算法+变压器制造矩形切割问题,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
代码程序猿RIP11 小时前
【Linux】线程封装
linux·jvm·c++
GEO_JYB12 小时前
从 MMLU 到 HumanEval:为什么评估大型语言模型(LLM)的基准至关重要?
人工智能·算法
heeheeai12 小时前
辗转相除法(欧几里得算法)的证明
算法·最大公约数
DKPT12 小时前
JVM新生代和老生代比例如何设置?
java·开发语言·jvm·笔记·学习
静心观复12 小时前
JVM 的 C1/C2 编译器
服务器·jvm