前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解gc(垃圾回收)机制四:GC标记-清除算法

详解gc(垃圾回收)机制四:GC标记-清除算法

作者头像
仙士可
发布2022-12-02 14:31:27
6400
发布2022-12-02 14:31:27
举报
文章被收录于专栏:仙士可博客

标记-清除算法

GC标记-压缩算法由标记阶段和清除阶段构成

我们在详解gc(垃圾回收)机制(一)   简单说明了 标记-清除算法

gc步骤:

1:暂停程序业务逻辑,对所有对象进行标记分类

2:找出程序可达对象和不可达对象

3:删除不可达对象

标记清除算法就是如此简单明了,不会出现循环引用的问题,

但是标记清除算法需要暂停程序,会造成程序卡顿

同时每次标记都需要扫描整个堆内存空间

步骤一:遍历根引用的对象:

仙士可博客
仙士可博客

步骤二:将已经引用的对象打上标记

仙士可博客
仙士可博客

步骤三:遍历引用对象的子对象,继续打上标记

仙士可博客
仙士可博客

步骤四:遍历整个堆,将堆上没有标记的对象清除:

仙士可博客
仙士可博客

优点

1:算法简单

缺点

1:碎片化

可以看出,在gc之后,每个空闲的堆空间都是不连续的,大大小小,在之后分配内存可能会出现大内存对象无法分配到有效堆空间的问题

2:分配速度慢

因为内存分块不是连续的,所以每次分配新的内存,都需要遍历整个空闲链表,找到适合内存对象的内存块

3:与写时复制技术不兼容

因为在gc标记阶段时,也会改动所有的活动对象的标记,导致触发了"写时复制",从而变成了不管有没有重写对象,都会触发写时复制.

该缺点可以通过一个新的活动对象(位图结构),将活动对象对应上,在标记时,只在新活动对象改动,而不改动活动对象

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/11/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 标记-清除算法
    • 步骤一:遍历根引用的对象:
      • 优点
        • 缺点
          • 1:碎片化
          • 2:分配速度慢
          • 3:与写时复制技术不兼容
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档