【JVM】判断对象能否回收的两种方法:引用计数算法,可达性分析算法

server/2024/9/21 11:54:54/

1、引用计数算法

给对象添加一个引用计数器,当该对象被其它对象引用时计数加一,引用失效时计数减一,计数为0时,可以回收。

特点:占用了一些额外的内存空间来进行计数,原理简单,判定效率高

引用计数法简单易实现,但无法解决循环引用的问题

(这种引用情况下,A和B的计数器始终大于等于1。)

应用:引用计数法适用于对象生命周期较短、没有循环引用的场景,

2、可达性分析算法

基本思路是通过根对象(GC Roots)作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为引用链(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连,或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。

可以通过引用链到达“根”的对象存活,不可到达的对象可以回收。(这个“根” 名为GC Roots)

特点:能够正确处理循环引用,但实现相对复杂,需要递归遍历对象图。

应用:可达性分析适用于长生命周期、存在循环引用的场景,


http://www.ppmy.cn/server/119801.html

相关文章

系统架构设计师 需求分析篇一

📘 结构化分析SA 思想 自顶向下:像剥洋葱一样,层层深入,大问题拆成小问题,再拆成更小的问题。 核心模型 数据字典 📔:记录数据元素的点点滴滴,从属性到使用方式,无所…

科研绘图系列:R语言散点图和小提琴图(scatter plot violin plot)

文章目录 介绍加载R包导入数据数据预处理函数画图系统信息介绍 提取模型的结果并对模型的结果进行可视化。 加载R包 library(ggplot2) library(ggridges) library(patchwork) library(party) library(caret) library(dplyr

SpringDataJpa自关联映射时出现StackOverflowError

使用Jpa自关联时,存在子数据的记录会报内存溢出问题StackOverflowError 原因: 使用了 lombok 插件中的Data注解来标注类,生成 gettet/setter 以及 toString lombok 在生成时会出现循环比较两类中的 hashcode,导致内存溢出。 解决…

一条sql是如何执行的详解

一条sql是如何执行的详解 1. SQL 解析(Parsing) 2. 查询重写(Query Rewrite) 3. 查询规划(Query Planning) 4. 查询执行(Query Execution) 5. 结果返回 示例:查询执…

vue2中使用vue-office库预览pdf /docx/excel文件

vue2中使用vue-office库预览pdf /docx/excel文件 - 简书 vue引用vue-office实现docx、excel、pdf等文件预览_vue-office-excel-CSDN博客

linux-软件包管理-软件源配置

Linux 软件包管理:软件源配置 1. 软件包管理概述 在 Linux 系统中,软件包管理器(Package Manager)是用户安装、更新、删除软件的重要工具。不同的 Linux 发行版通常使用不同的包管理系统,如 Debian 系列使用 dpkg 及…

【java】常见限流算法原理及应用

目录 前言 限流的作用 4种常见限流算法 固定窗口限流 基本原理 简单实现 优点和缺点 滑动窗口限流 基本原理 简单实现 优点和缺点 漏桶限流 基本原理 简单实现 优点和缺点 令牌桶限流 基本原理 简单实现 优点和缺点 算法比较与选择 前言 在现代分布式系统…

Django Form 组件

Form 类定义 定义:在 Django 中,Form 组件用于处理和验证用户输入的数据,Form 类定义在 django.forms 模块中,用于创建表单。通过继承 forms.Form 类,你可以定义表单字段、验证逻辑和表单的其他属性。 1.在fa目录下新…