网站大量收购独家精品文档,联系QQ:2885784924

垃圾回收与d语言内存管理.pdf

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
垃圾回收与d语言内存管理

垃圾回收与D语言内存管理 基础服务D组——毛子华 GC :垃圾回收 GC统一理论 :任何一种GC 算法都是跟踪回收和引用计数 回收两种思路的组合。 引用计数 引用计数是指,针对每一个对象,保存一个对该对象的引用计 数,该对象的引用增加,则相应的引用计数增加。如果对象的引 用计数为零,则回收该对象。 优点: ● 1. 可以立即回收 ● 2. 最大暂停时间短。一般情况下可以,如果引用链路很长,也会出 现暂停 ● 3. 没有必要沿用指针查找 缺点: ● 1. 计数器增减繁重 ● 2. 计数器需要占用额外的存储 ● 3. 无法回收循环引用 ● 4. 算法简单,实现情况却很多 标记- 清楚(Mark Sweep )算 标记- 清除算法分为两个阶段,标记(mark) 和清 除(sweep). 在标记阶段,collector 从Root 根对象开始进行 遍历,对从mutator 根对象可以访问到的对象都 打上一个标识,一般是在对象的header 中,将其 记录为可达对象。 而在清除阶段,collector 对堆内存(heap memory) 从头到尾进行线性的遍历,如果发现某 个对象没有标记为可达对象- 通过读取对象的 header 信息,则就将其回收。 标记- 清楚(Mark Sweep )算 优点: 1. 实现简单 2. 与保守式算法兼容 缺点: 1. 碎片化 2. 暂停时间随堆越大时间越多 保守式GC 简单来说,就是不能识别指针和非指针的GC 。 不明确的根:寄存器,调用栈和全局变量空间都是不明确的根 优点: 处理程序不依赖于GC ,代码编写者即使没有意识到GC 的存在,程序也会自己回收 缺点: 1 )识别指针和非指针需要耗费成本 2 )错误识别的指针会被当成活动的对象,包括其子对象,可能会造成垃圾对象压迫堆,即 回收不完全,存在内存泄漏 3 )能够使用的GC 算法有限 精确GC 可以精准的识别指针和非指针。 优点:不会留下非活动对象 缺点:要求处理程序的配合,给实现者带来麻烦,且每次取消标签,再重新设置,会影响到 程序处理的整体速度 GC 复制算 只把某个空间里的活动对象复制到其他的空间,把原空间里的所有对象都 回收掉。 GC 复制算法是利用From 空间进行分配的。当From 空间被完全占满时, GC 会将活动对象全部复制到To 空间,复制完成后,该算法会把 From 和 To 空间互换。 优点 优秀的吞吐量 可实现高速分配 不会发生碎片化 与缓存兼容 缺点 堆使用效率低下 不兼容保守式GC 标记- 压缩算 GC 标记- 压缩算法是将GC 标记- 清除算法和 GC 复制算法相结合的产物 标记- 压缩算 由标记阶段和压缩阶段组成 标记阶段和GC 标记- 清除算法中的标记阶段完 全相同 优点 堆利用效率高 能有效避免碎片化 缺点 吞吐量差 写屏障 写屏障 :A write barrier in a garbage collector is a fragment of code emitted by the compiler immediately before every store operation to ensure that (e.g.) generational invariants are maintained.” 即是说,在每一处内存写操作的前面 ,编译器会生成的一小段代 码段,来确保不要打破一些约束条件。 增量和分代,都需要维护一个write barrier 。 分代的垃圾回收,跨越不同分代之间的引

文档评论(0)

wangyueyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档