垃圾标记阶段--引用计数算法、可达性分析算法

本文介绍了垃圾回收的两种主要方法:引用计数算法和可达性分析算法。引用计数算法在Java中未使用,但在Python中应用,通过手动解除循环引用或使用弱引用解决其缺点。可达性分析算法是Java采用的方法,以GC Roots为起点,通过引用链判断对象是否存活。Java中的GC Roots包括虚拟机栈、本地方法栈、类静态属性、常量引用等。
摘要由CSDN通过智能技术生成

前言:

对象存活判断

在垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有对死亡对象的标记才会被GC释放空间,因此这个过程可以称为垃圾标记阶段。

简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。

判断对象的存活一般有两种方式:引用计数算法可达性分析算法

一、引用计数算法(Java未使用)

1、原理:
引用计数算法,对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。

对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就 + 1;当引用失败时,引用计数器就 - 1。只要A的引用计数器的值为0,即表示对象A不可能再使用,可进行回收。

2、优点:实现简单、垃圾对象便于辨识;判定效率高,回收没有延迟性(为零就可以及时收集)。

3、缺点:
(1)它需要单独的字段存储计数器,这样增加了存储空间的开销
(2)每次赋值都需要更新计数器,伴随着加法和减法操作,增加了时间开销;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值