GC 的三种基本实现方式

本文介绍了GC(垃圾回收)的三种基本实现方式:标记清除、复制收集和引用计数。标记清除从根开始标记可引用对象,然后回收未标记对象。复制收集将存活对象复制到新空间,避免对大量死亡对象的扫描。引用计数则为每个对象维护引用计数,计数为0时释放对象。然而,引用计数无法处理循环引用问题,且并发处理时有潜在风险。
摘要由CSDN通过智能技术生成

GC 的三种基本实现方式

参考资料《代码的未来》(作者: [日] 松本行弘)。

由于并非本人原著(我只是个“搬运工“),SO 未经本人允许请尽情转载。

另外个人像说明一下这里所说的GC指泛指垃圾回收机制,而单指Java或其他某种特定语言中的GC——可能具体语言中实现的垃圾回收实现机制会有所不同。下面是具体内容:


将内存管理,尤其是内存空间的释放实现自动化,这就是GC(Garbage Collection)。
GC其实是个古老的技术,从20世纪60年代就开始研究,还发表了不少论文。这项技术在大学实验室级别的地方已经应用了很长时间,但是可以说从20世纪90年代Java出现之后,一般程序员才有缘基础到它,在此之前这项技术还只是少数人的专利。

术语定义

1,垃圾:
所谓垃圾(Garbage),就是需要回收的对象。作为编写程序的人,是可以做出“这个对象已经不需要了“这样的判断,但是计算机是做不到的。因此如果程序(通过某个变量等等)可能会直接或间接的引用一个对象,那么这个对象就被视为“存活“;与之相反,已经引用不到的则被视为“死亡“。将这些死亡对象找出来,然后作为垃圾进行回收,者就是GC的本质。
2,根
所谓的根(Root),就是判断对象是否被引用的起始点。至于哪里的才是根,不通的语言和编译器都有不通的规定,但基本上是将变量和运行栈空间作为根。


主要GC实现方式:

标记清除方式


标记清除(Mark and Sweep)是最早开发出来的GC算法(1960年)。它的原理非常简单:
首先从根开始将可能被引用的对象用递归的方式进行标记,然后将

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值