js 回收机制 标记-清除

标记-清除(Mark-and-Sweep)是垃圾回收(Garbage Collection, GC)算法中的一种基本方法,用于自动管理内存,尤其是在一些高级编程语言如Java、Python中应用广泛。该算法分为两个主要阶段来确定和回收不再使用的内存空间,即不再被任何变量引用的对象所占用的内存。下面是该算法的简单说明:

  1. 标记阶段(Mark)
    目的:识别出所有还在使用的(即可达的)对象。从一组根对象(通常是线程栈中的局部变量、静态变量等)开始,遍历整个对象图,将能够直接或间接从根对象访问到的所有对象标记为“活着”或已使用。
    实现:这通常通过递归或迭代的方式进行,每个被访问到的对象都会被设置一个标记位,表示它是一个活动对象。
  2. 清除阶段(Sweep)
    目的:释放未被标记的对象所占用的内存空间。遍历整个堆内存,找到那些在标记阶段没有被标记为“活着”的对象,这些对象被视为垃圾,因为它们不再被程序的任何部分引用。
    实现:系统会回收这些未标记的对象所占用的内存区域,使其成为可用内存,供后续的新对象分配使用。
    注意事项
    效率问题:标记-清除算法的一个主要缺点是它可能会导致程序暂停,因为它需要遍历所有对象,且回收过程也可能比较耗时。这在对响应时间有严格要求的应用中可能成为一个问题。
    内存碎片:回收后虽然释放了空间,但这些空间可能是不连续的,导致出现内存碎片,影响大对象的分配。为解决这个问题,一些GC策略会结合其他算法,如压缩(Compaction)来整理内存,减少碎片。
    总的来说,标记-清除算法是垃圾回收的基础,尽管它存在一些不足,但通过与其他技术结合,仍然是现代编程语言中内存管理的重要组成部分。
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值