GC:可达性分析算法

垃圾标记阶段--引用计数算法、可达性分析算法 前言: 对象存活判断 在垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有对死亡对象的标记才会被GC释放空间,因此这个过程可以称为垃圾标记阶段。 简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。 判断对象的存活一般有两种方式:引用计数算法 和 可达性分析算法。 一、引用计数算法(Java未使用) 1、原理: 引用计数算法,对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。 对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就 阅读详情

可达性分析算法之前有一个叫引用计数法,原理非常简单如果一个对象没有任何引用与之关联,基本上对象不可能在其他地方用的上,这个对象就成为可被回收的对象,但是这个方法虽然非常简单,而且高效,但是它无法解决循环调用的问题,如下图所示:

public class Main {
    public static void main(String[] args) {
        Demo d1 = new Demo();
        Demo d2 = new Demo();
 
        d1.o = d2;
        d2.o = d1;
 
        d1 = null;
        d2 = null;
    }
}
 
class Demo{
    public Object o = null;
}

可达性分析算法

此算法的核心思想:通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为“引用链”,当一个对象到 GC Roots 没有任何的引用链相连时(从 GC Roots 到这个对象不可达)时,证明此对象不可用。

注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了。

在Java语言中,可作为GC Roots的对象包含以下几种:

 

抖音直播参数逆向实战:手把手教你用Python获取ttwid和x-bogus(附完整代码) 本文深入解析抖音直播接口的反爬机制,重点剖析核心防护参数ttwid和x-bogus的生成原理与作用。通过Python实战,手把手教你逆向获取ttwid、webid等关键参数,并构建稳定的数据采集方案,为开发者提供企业级数据获取能力。 阅读详情

相关推荐

深入解析JESD204B Subclass 1中的SYSREF与LMFC同步机制

本文深入解析了JESD204B Subclass 1协议中的核心同步机制,重点阐述了SYSREF信号如何作为系统级参考,对齐所有设备内部的本地多帧时钟(LMFC),从而实现高速多通道数据采集系统中的确定性延迟。文章结合实战经验,详细说明了硬件设计、时序要点及软件配置流程,是解决多ADC芯片同步对齐问题的关键指南。

weixin_29271263的博客 398

JVM垃圾回收之GCRoots可达性分析

JVM之GCRoots

weixin_44149903的博客 1123

零基础玩转NILM:用nilmtk提取UKDALE电器数据的保姆级教程

本文为零基础用户提供了一份详细的NILM入门指南,重点讲解如何使用nilmtk工具包从UKDALE数据集中提取电器级用电数据。教程涵盖环境搭建、核心概念解析、数据提取实战及常见问题排查,帮助读者快速掌握非侵入式负荷监测的数据预处理关键步骤。

rgv234567的博客 499

可达性算法、Java引用 详解

转自 https://www.jianshu.com/p/8f5fa8288d9b   在堆里存放着几乎多有的java对象实例,垃圾搜集器在对堆进行回收之前,第一件事情就是确定这些对象之中哪些还“存活”着(即通过任何途径都无法使用的对象)。 一、可达性分析算法 在Java中,是通过可达性分析(Reachability Analysis)来判定对象是否存活的。该算法的基本思路就是通过一些被称...

wowwilliam0的博客 1039

stm32cubeMX使用HAL库点亮LED流水灯

目录

weixin_46129506的博客 3798

单总线CPU设计(变长指令周期3级时序)(HUST)(头歌实验)

利用比较器等功能模块将32位MIPS 指令字译码生成LW、SW、BEQ、SLT、ADDI、OtherInstr信号也就是利用比较器将指令字转换为译码信号,OP与不同信号对应(查询MIPS手册得知) 16 进制 :23 是 2进制: 00100011 ,把获得的OP,Func,和常数比对,相同输出1.按照题目要求填写表格,使用logisim的组合逻辑电路分析功能,当然也可以直接再logisim中写真值表。单总线采用变长指令周期,不同指令周期数不同,节拍数可变化。写的excel表格最终生成电路(当然 需要先把

xuxuaifeifei的博客 1万+

Java 垃圾回收最全讲解(GC过程、可达性分析、方法,7大回收器)

Java 垃圾回收最全讲解(GC过程、可达性分析、方法,7大回收器)

zhhongying的博客 4545

服务器卡死排查实战:从现象分类到根因定位的完整手册

服务器卡死是运维中最令人头疼的故障之一,从游戏圈吐槽的“土豆服务器”到生产环境中的Linux系统无响应、rsync复制挂起,本质都是系统或进程失去正常响应能力。其原理通常涉及CPU、内存、磁盘IO或网络资源耗尽,以及内核和驱动异常。掌握系统化的排查方法,能够帮助工程师快速定位根因、缩短故障时间,避免盲目重启。本文从资源、层级、场景等多维度分类,结合top、dmesg、strace等工具,梳理一套从现象确认、指标收集、日志分析到进程定位的实战排查流程,并覆盖常见高频场景与预防治理建议。无论你是运维新手还是老手

weixin_33851177的博客 375

JVM之【GC-可达性分析算法】

可达性分析算法通过从一组称为"根对象"(GC Roots)的对象开始,遍历对象引用图,确定哪些对象是可达的。那些无法从根对象访问到的对象被视为不可达的,可以被垃圾收集器回收。

苟且。的博客 1676

YOLOv11 改进 - 注意力机制 | Deformable-LKA 可变形大核注意力:自适应采样网格优化特征捕捉,提升不规则目标感知

本文介绍了可变形大核注意力(D-LKA Attention)及其在YOLOv11中的结合。D-LKA Attention是一种简化的注意力机制,采用大卷积核利用体积上下文信息,通过可变形卷积灵活调整采样网格,适应多样数据模式。它有2D和3D版本,3D版本在跨深度数据理解上表现出色,共同构成了D-LKA Net架构。我们将D-LKA Attention集成进YOLOv11,在模型的检测头部分引入deformable_LKA_Attention模块。实验表明,该方法在分割任务上表现优于现有方法,提升了模型的检测

魔改工程师的博客 1170

YOLO26训练自己的数据集,从代码下载到实例测试 (含YOLO26网络结构图)

在Windows10上配置CUDA环境教程2026年1月14日,YOLO26是最新发布的计算机视觉模型。支持多种任务,包括目标检测、实例分割、图像分类、姿态估计、有向目标检测以及物体跟踪等。以上就是YOLO26训练自己数据集的全部过程啦,欢迎大家在评论区交流~

Limiiiing的博客 6508

Java内存模型、GC Roots可达性分析、垃圾回收机制

文章目录一 Java内存结构二 可达性分析与GC Roots2.1 可达性分析算法2.2 什么样的对象可以作为GCRoots2.3 什么时候会触发垃圾回收三 如何回收垃圾3.1 标记-清除算法3.2 复制算法3.3 标记-整理算法3.4 分代收集算法分代收集算法中的内存分配与回收策略四 参考 一 Java内存结构 其中,堆和方法区属于线程共享区域,虚拟机栈、本地方法栈、程序计数器属于线程私有区域...

小马快跑的博客 1061

Java开发者终极抉择:IntelliJ IDEA vs VS Code —— 4大维度深度对比评测

🔥关注墨瑾轩,带你探索Java的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手!🚀🔥技术宝库已备好,就等你来挖掘!🚀🔥订阅墨瑾轩,智趣学习不孤单!🚀🔥即刻启航,编程之旅更有趣!🚀在Java开发领域,选择合适的集成开发环境(IDE)对于提高开发效率和代码质量至关重要。和(简称VS Code)是两个广受好评的开发工具,各自拥有独特的特性和庞大的用户群。本篇将从多个维度深入探讨这两款IDE对Java开发者来说的优劣,包括但不限于性能、用户体验、生态系统、调试能力、以及特定Java功能的支持等方面。

java专栏 8590

Java JVM 4-GC对象判断算法:引用计数法,可达性分析算法

因为JVM的GC(垃圾回收)机制,所以使java程序员不用再受内存分配及内存回收的烦恼(其实还是会有这些烦恼,我们以后再进行探讨),而可以将注意力集中在程序的设计上,虽然我们不用再关心这些过程,但是GC的垃圾回收我们还是要了解一下的。 对于内存的六大区域,对于线程私有的程序计数器,java虚拟机栈,本地方法栈三个区域,它们的生命周期都是随线程开始而生,线程结束而灭,并且这三个区域的内存分配和回收...

Xucc_x的博客 2286

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

GC 怎么判定“该回收谁”:GC Roots、可达性分析、四种引用与回收算法

本文系统梳理了JVM垃圾回收(GC)的核心机制。首先通过可达性分析从GC Roots出发判定对象存活状态,再介绍三种回收算法:标记清除(产生碎片)、复制(高效但需额外空间)和标记整理(减少碎片)。文章解析了分代收集策略,说明新生代和老年代采用不同算法的原因,并详解强、软、弱、虚四种引用类型对回收的影响。最后提供内存问题排查思路:检查GC Roots引用、存活对象数量,并使用heapdump分析引用链。全文帮助读者建立从GC原理到实际排障的完整认知框架。

alkamgg的博客 219

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java GC必看:GC Roots、可达性分析与三大回收算法

本文先讲解 Java GC 判断对象可回收的核心 —— 可达性分析算法(从 GC Roots 出发判断对象可达性),再拆解标记清除、标记整理、复制三大基础 GC 算法,分析各算法的核心逻辑、优缺点及适用场景,揭示现代 JVM 分代回收是结合三类算法优势的实践。

weixin_68315058的博客 565

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

004-JVM-Java中使用的标记阶段的算法:可达性分析算法中GC Roots有哪些

上一篇:003-JVM-标记阶段的算法:怎么确定垃圾 https://blog.youkuaiyun.com/fsjwin/article/details/111322134 gc roots有哪些呢?这个是面试题,也要背下来,如果不想进大厂的话,可以不背。 1. 常规gc roots JVM stack 虚拟机栈中引用的对象 比如: 各个线程被调用的方法中使用到的参数、局部变量等 nativ method stack JNI( 通常说的本地方法) 引用的对象 runtime constant

前路无畏的博客 1万+

引用计数器法 可达性分析算法_JVM04:GC详解、GC四大算法和GC Root

点击上方“蓝字”,记得关注我哦!GC详解GC的作用域GC的作用域如下图所示。关于垃圾回收,只需要记住分代回收算法,即不同的区域使用不同的算法。不同区域的GC频率也不一样:年轻代:GC频繁区域。老年代:GC次数较少。永久代:不会产生GC。一个对象的历程一个对象的历程的如下图所示。JVM在进行GC时,并非每次都是对三个区域进行扫描的,大部分的时候都是对新生代进行GC。GC有两种类型:普通GC...

weixin_39724009的博客 359

垃圾回收器基础:可达性分析、方法区的回收、垃圾回收算法和GC策略

内容概述:先了解GC时回收对象是如何判断的,然后是方法区进行那些垃圾回收。因为不同的对象有不同的回收策略我们接着看一些垃圾算法,以及垃圾回收策略。

hiliang521的博客 1383

Davids知识点笔记:GC如何判断对象是否死亡(引用计数法、可达性分析算法)

GC如何判断对象是否死亡 引用计数法 给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1,当引用失效,计数器就减1,任何时候计数器为0的对象就是不可能再被使用的对象,则在GC时可以回收,无法解决循环依赖的问题。 可达性分析算法 该算法的基本思想就是通过一系列的成为“GC Root”的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到GC Root没有任何引用链相连的话,则证明此对象不可用,则在GC时可以回收。 什么是GC Root对象 常说的GC(Garbage Co

Davids_的博客 3218

【JVM笔记】引用计数算法与可达性分析算法

垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用,甚至可能导致内存溢出。.........

lijibai_的博客 576

确定那些对象是垃圾-可达性分析算法

概述 引用计数法 可达性分析算法 概述 程序运行时,堆内存中存在很多的对象,在GC之前需要知道哪些对象能够进行GC,哪些对象不能够精心GC。 引用计数法 给对象增加一个计数器的功能,当存在引用使用功能对象是,计数器值加一,当引用失效时计数器值减1,任何时候计数器值为0时的对象是无法被使用的。 问题:引用计数器无法解决循环引用的问题。 可达性...

jtracydy的博客 2739

GC可达性分析回收算法 解决循环引用问题

JVM有一个回收算法是引用计数算法,每当对象被引用一次,就+1,释放一个引用就-1,当垃圾回收时,引用计数为0的对象就会被GC掉。但这个方法有个问题,就是无法解决循环引用的问题。 循环引用就是对象A引用了对象B,对象B引用了对象A,构成了一个引用环。彼此都没发挥什么作用,但却不会被GC。为了解决这个问题,就有了可达性分析回收算法。 可达性分析: 算法中定义了几个GC Root对象,这几个root对象在GC时不会被JVM回收掉,然后通过这些对象像树枝一样向外延伸,被引用到的对象说明还存活使用,就不会被GC,没

weixin_42128568的博客 2823

JVM垃圾收集(GC)机制和GC算法

垃圾收集(Garbage Collection)机制前言1.GC需要回收哪些内存?2.回收的基本单位?1.标记:判断对象生死(1)引用计数法(Python中使用,这里做简单介绍)(2)可达性分析(Java中使用)2.回收:把死的对象回收回去(1)标记-清除算法(2)标记-复制算法(3)标记-整理算法 前言 垃圾收集(Garbage Collection)简称GC。 1.GC需要回收哪些内存? 主要回收堆,其次是方法区,栈中不需要回收,线程结束,栈上的内存就会被释放。 2.回收的基本单位? 内存的单位是“字节

m0_52373742的博客 1319

jvm原理四:利用可达性分析算法GC怎么判断对象生存还是死亡,经过了几次过滤,每次都做了什么

经历了2次标记过程,即2次过滤过程。第一次:如果对象在进行可达性分析后发现没有GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法,当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为没有必要执行。如果这个对象被判定为有必要执行finalize()方法,那么这个对象...

dancheng1的博客 706

JAVA进阶之路-4:垃圾回收器GC,含可达性分析算法,垃圾回收算法,Serial/ParNew/Parallel Scavenge/CMS/G1等收集器(7个)

Java垃圾回收器-GC

HakerDONG的博客 1214
上一篇: JVM虚拟机运行时数据区(内存模型)
下一篇: JAVA虚拟机发生GC的过程简要分析(待续...)
悟道|养家
博客等级 码龄8年 33粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值