Garbage Collection
文章平均质量分 70
介绍讨论 Garbage Collection技术
sweeterer
这个作者很懒,什么都没留下…
展开
-
Garbage Collection | 引用计数算法
这是一个比较直接的算法,其基本手段是为每一个单元计算指向它的引用(来自其他活动单元或者根)的数量【Collins,1960】.它的优点在于能够非常简单的判断单元是否原创 2016-10-09 21:37:23 · 12719 阅读 · 1 评论 -
Garbage Collection | Mark-Sweep算法
这是第一种用于自动内存管理的算法,标记-清扫(mark-sweep)算法【McCartby ,1960】.在这一方案下,内存单元并不会在变成垃圾的同时立刻回收,而是保持不可到达和未被发现的状态,直到所有可用的内存都耗尽。如果此时再次出现对新单元的请求,系统会暂时挂起“有用”的程序,并调用垃圾收集例程,将堆中所有当前并未使用的单元清扫回自由单元池中。标记-清扫算法依靠原创 2016-10-10 11:43:52 · 7655 阅读 · 1 评论 -
Garbage Collection | 节点复制算法
这次考察的是基于追踪的算法:节点复制算法。节点复制式收集器将整个堆等分成为两个半区(semi-space),一个包含现有的数据,另一个包含已被废弃的数据,节点复制式垃圾收集从filp两个半区的角色开始。然后收集器在老的半区,也就是Fromspace中遍历存活的苏话剧结构,在第一次访问某个单元时把它复制到新的半区,也就是Tospace中去。在Fromspace中所有存活单元都被访原创 2016-10-11 14:46:05 · 7673 阅读 · 1 评论 -
Garbage Collection | 引用计数的改善考察(一)
1 非递归的释放之前的博文中,所介绍的简单的引用计数算法中,每当指向某个对象的指针被改写的时候,Update过程就会减小那个对象的引用计数数值。如果计数值变为0,那么在将该对象所占据的内存归还给自由链表之前,必须递归地删除这个对象所包含的指针。因此,简单的递归释放在散布处理开销时并不均匀:删除指向某个对象的最后一个指针的代价不是常数,甚至不是正比于对象大小,而是依赖于以改对象为根的子图的大小。1.1原创 2016-10-12 16:46:38 · 11191 阅读 · 0 评论 -
Garbage Collection | 引用计数的改善考察(二)
3 计数域大小受限得引用计数续前文,引用计数技术需要再每个单元中保留一定空间以存放引用计数值。理论上,再最糟糕得情况下,这个域必须达到足够存放堆中节点核根所保存得指针的总数,换句话说,这个域必须核指针一样大。然而,若是说所有的应用里计数值都会增长到这么大,那未免泰国不可思议了。因此,我们可以使用较小的引用计数域来节省空间,代价则识必须小心地处理溢出问题。3.1 “粘住的”计数值对于某个单元,引用计数原创 2016-10-23 19:23:52 · 9419 阅读 · 0 评论 -
Garbage Collection | 引用计数的改善考察(三)
5 环形引用计数续前篇,引用计数技术无法回收环形数据结构,这个由McBeth首先 注意到的问题可能是反对引用计数的最有力的论据[McBeth, 1963]。环形结构在应用层和系统层都是相当常见的。一般来说,当程序员们使用反向指针(back-pointer)、或是为了以自然的方式表达某些领域相关问题时,往往会创建一个环。此外,程序员有时也会在无意中创建环,例如在一个哈希表链(hash table ch原创 2016-11-15 20:46:42 · 23856 阅读 · 1 评论