前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题26:GC算法——标记清除法

面试题26:GC算法——标记清除法

作者头像
爪哇缪斯
发布2023-05-09 21:38:30
1230
发布2023-05-09 21:38:30
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯

标记清除法的算法如下图所示:

  • 优点:

实现简单

与保守式GC算法相兼容(由于保守式GC算法中,对象是不能被移动的。所以,适用于标记-清除算法。)

  • 缺点:

内存空间碎片化

由于分块不是连续的,因此每次分配都必须遍历空闲链表,找到足够大的分块。

如果分配的是大的对象,最糟的情况就是得把空闲链表遍历到最后。

标记和清除过程的效率都不高。

  • 总结原理:

它是最基础的GC算法,后续的GC算法都是针对它的缺点进行改良而产生的。JVM回收器中的CMS就是使用的该算法

  • 保守式GC

简单来说,保守式 GC(Conservative GC)指的是“不能识别指针和非指针的GC”。

【优点】

①语言处理程序不依赖于GC

保守式GC的优点在于容易编写语言处理程序。处理程序基本上不用在意GC就可以编写代码。语言处理程序的实现者即使没有意识到GC的存在,程序也会自己回收垃圾。因此语言处理程序的实现要比准确式GC简单。

【缺点】

①识别指针和非指针需要付出成本

②错误识别指针会压迫堆。

当存在貌似指针的非指针时,保守式GC会把被引用的对象错误识别为活动对象。如果这个对象存在大量的子对象,那么它们一律都会被看成活动对象。因为程序把已经死了的非活动对象看成了活动对象,所以垃圾对象会严重压迫堆。

③能够使用的GC算法有限。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档