GC标记-清除算法(Mark Sweep GC)

GC标记-清除算法包括标记和清除两个阶段,用于管理堆空间中的内存。标记阶段通过遍历根对象来标记活动对象,清除阶段回收未标记的对象。此算法存在碎片化问题,后续有多种改进方法,如位图标记法、多个空闲链表和延迟清除法等,以提高内存利用率和分配速度,同时减少暂停时间对程序的影响。
摘要由CSDN通过智能技术生成

GC标记-清除算法(Mark Sweep GC)

GC算法是对堆空间进行的内存管理,一般堆空间会按内存分配成大小相等的块,并用链表串连起来,比如free_list表示可用空间。
标记清除算法主要有两部分即标记和清除,实现垃圾回收,但垃圾回收之外,还有对应的内存分配,以及垃圾回收后的碎片整理等。

gc(){
    mark()
    sweep()
}

标记阶段:mark()函数是会对根对象进行遍历,实现活动的对象的标记,即标记说话费的时间与活动对象的总数成正比;mark时时,对象的搜索主要有dfs和bfs,但dfs所用的内存空间较少一半用dfs。

什么样的对象是活动的?
根对象下所有包含的对象,即整个结构下都有记录,这样的对象时活动的;对于没有记录的对象,即对于程序而言是不会再用到的,这样的对象就是可回收的垃圾。
所以,对于有gc的语言,我们不需要进行动态空间的回收处理,当我们不需要时,即没有记录了,gc算法会自动处理。

清除阶段:sweep()函数,遍历所有的对,回收为标记的对象(垃圾),取消活动对象的标记,为下次mark即gc刷新;清除所花费的时间和堆的大小成正比。
在这里插入图片描述

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值