当前位置: 首页 > article >正文

JVM系列(九) -垃圾对象的回收算法介绍

一、摘要

在之前的文章中,我们介绍了 JVM 内部布局、对象的创建过程以及运行期的相关优化手段。

今天通过这篇文章,我们一起来了解一下对象回收的判定方式以及垃圾对象的回收算法等相关知识。

二、对象回收判定方式

当一个对象被创建时,虚拟机会优先分配到堆空间中,当对象不再被使用了,虚拟机会对其进行回收处理,以便释放内存空间,这个过程也被称为垃圾对象回收。

那么如何找到对象是否可以进行回收呢?一般有两种方式。

  • 引用计数法
  • 可达性分析法

下面我们一起来了解下相关知识。

2.1、引用计数法

这个方法的实现思路是:在对象中维护一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失效时,计数器值-1。当对象的计数器值为 0,表示这个对象不再被使用了,可以被回收。

这种方法使用场景很多,但很少有垃圾收集器会使用这种方式。

原因在于:这种方式存在一个致命的缺陷,比如堆中的两个对象相互引用,此时他们的计数器值是 1,但这两个对象并没有被外部使用,因此不会被回收,容易造成内存泄露。

2.2、可达性分析法

这个方法的实现思路是:从“GC Roots”(这个 GC Roots 可以是栈中的引用变量,也可以是方法区的引用变量或常量)开始扫描堆中的对象,沿着 GC Roots 一路扫描,被扫描的所有对象全部标记为存活对象;扫描完成之后,没有被标记的视为垃圾对象࿰


http://www.kler.cn/a/292208.html

相关文章:

  • C++:基于红黑树封装map和set
  • 嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)
  • Node.js GET/POST请求、WEB模块使用介绍 (基础介绍 八)
  • 金山云Java 开发面试题及参考答案
  • 使用 npm 安装 Yarn
  • 《动手学深度学习》中d2l库的安装以及问题解决
  • 深度学习回归任务训练代码模版
  • MacOS---IDEA快捷键:生成get/set方法
  • 【C++】手动实现String类的封装(分文件编译)
  • 具身智能猜想 ——机器人进化
  • 一款管理苹果设备的软件iMazing3中文破解安装激活教程
  • Node.js 数据库操作详解:构建高效的数据持久化层
  • 行空板上YOLO和Mediapipe视频物体检测的测试
  • Docker续7:docker部署nmt续1:使用haproxy代理nginx
  • 在Windows系统上部署PPTist并实现远程访问
  • 链表leetcode-1
  • 什么是新顶级域名?与传统域名有什么不同?
  • Linux 中的 wget 命令介绍以及使用
  • 【 C++ 】 类和对象的学习 (二)
  • python办公自动化:使用`Python-PPTX` 嵌入媒体文件
  • 使用Fign进行客户端远程调用和SpringFormEncoder的使用
  • 2024霸王餐小程序cps,h5公众号小程序开源版系统搭建开发,外卖霸王餐小程序系统源码
  • 学习笔记八:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台
  • Android Manifest 权限描述大全对照表
  • ubuntu22.04搭建elasticsearch+kibana环境
  • Copilot+ PC 借助新的 AMD 和 Intel 芯片扩大可用性