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

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

1. 引用计数算法

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

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

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

主流的商用程序语言都是使用根搜索算法判断对象是否可回收。根搜索算法的思路是,从若干被称为 GC Roots 的对象开始进行搜索,不能到达的对象即为可回收的对象。
在 Java 中,GC Roots 一般包含下面几种对象:

  • 虚拟机栈中引用的对象;
  • 本地方法栈中的本地方法引用的对象;
  • 方法区中的类静态属性引用的对象;
  • 方法区中的常量引用的对象。

相关推荐

  1. JVM 如何判断对象是否回收

    2024-04-22 09:26:04       35 阅读
  2. JVM中的GC如何判断对象可以被回收

    2024-04-22 09:26:04       38 阅读
  3. 如何判断对象可以被回收

    2024-04-22 09:26:04       45 阅读
  4. 如何判断一个元素是否视区域中

    2024-04-22 09:26:04       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 09:26:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 09:26:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 09:26:04       82 阅读
  4. Python语言-面向对象

    2024-04-22 09:26:04       91 阅读

热门阅读

  1. Android活动之Intent

    2024-04-22 09:26:04       36 阅读
  2. 完全日期(蓝桥杯)

    2024-04-22 09:26:04       34 阅读
  3. k8s和docker的一些学习(一)

    2024-04-22 09:26:04       36 阅读
  4. Dockerfile学习

    2024-04-22 09:26:04       38 阅读
  5. 算法 第46天 动态规划8

    2024-04-22 09:26:04       38 阅读
  6. clickhouse ttl不生效

    2024-04-22 09:26:04       32 阅读
  7. go语言触发浏览器打开网址程序实例

    2024-04-22 09:26:04       31 阅读
  8. 【大语言模型LLM】-大语言模型如何编写Prompt?

    2024-04-22 09:26:04       32 阅读
  9. 12.Ribbon饥饿加载

    2024-04-22 09:26:04       33 阅读
  10. windows使用ssh-copy-id命令的解决方案

    2024-04-22 09:26:04       35 阅读
  11. ORAN每个端点和每个C平面消息的限制

    2024-04-22 09:26:04       39 阅读
  12. Nginx日志

    2024-04-22 09:26:04       36 阅读