讨论 GC 算法。

linzsoft 2004-10-28 08:28:30
目前有一个 project 是实现一个 GC ,采用的算法是用 mark and compact。
谁有这方面材料,或者讨论一下关于mark and compact 的算法。
...全文
301 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengsheng 2004-12-20
  • 打赏
  • 举报
回复
hoxide 2004-12-17
  • 打赏
  • 举报
回复
不错,好像有一本专门讲GC算法的书, 前几天看到过, 中文版的。
oyljerry 2004-12-16
  • 打赏
  • 举报
回复
学习
LSML007 2004-12-16
  • 打赏
  • 举报
回复
不懂了
真 厉害
linzsoft 2004-12-16
  • 打赏
  • 举报
回复
我先说一下心得,一天写一些,也希望大家发表自己的意见。
我们先由简单原理说起

首先要讲:垃圾回收并不是很可怕的课题,焦点应该集中在以下几个方面。

1:地址分配
内存的分配是在一个Heap中进行的,额外的我们只需要一个Heap指针。当需要进行内存分配的时候从Heap指针的位置开始检查能不能分配这个内存,如果剩余的内存不够分配,系统就触发GC回收内存里的无用空间。

2:堆栈地址
堆栈中的数据是用来记录内存地址起点的,比如如果要在内存中分配一个链表,那么链表的首地址就记录在堆栈中。如果是个数组,数组的起点一样记录在堆栈中。堆栈的作用就是记录数据结构的ROOT地址。

3:传统 Free , Dispose 和 GC 垃圾回收的区别
也许有人会问为什么采用GC以后,就不会出现以往内存泄漏的问题呢?答案是两种机制有别。
传统的 Free 叫做释放内存,就是直接将已经分配的地址释放,当然了如果每次分配之后对应的应用释放就不会产生内存泄露,但问题是有时候你不知道什么时候才能释放,另外有时候程序会在释放内存前意外退出等,这样内存的可用资源就越来越少了。GC就不同,它会自动回收内存,你不用再为释放内存而苦恼,但问题是GC调用的时候会很终端程序,直到整理了内存之后才能恢复,这样人们就不能不考虑GC的效率和触发事件的问题。

4:垃圾回收算法
我研究垃圾回收的算法是 标记压缩法,其他了解了一些 ,标记压缩法 英文是 mark and compact 。
现在java,.net的GC主要算法来源就是标记压缩法。

好了,先写这些,抛砖引玉一下,我是希望大家有兴趣一起研究一下。
ProgramInHeart 2004-12-15
  • 打赏
  • 举报
回复
ring..................
liuyong_lll 2004-12-15
  • 打赏
  • 举报
回复
ding...
linzsoft 2004-12-14
  • 打赏
  • 举报
回复
谢谢各位的关注,我已经实现了 GC 并且通过了模拟测试,实现的语言是ADA,如果有人感兴趣就参加讨论。

我采用的算法是双指针压缩法。
bootblack 2004-12-13
  • 打赏
  • 举报
回复
《程序员》2003第一期上面有个专题,讲得很详细,你可以在网上下一本,如果找不到我可以传给你。
lgg06 2004-12-13
  • 打赏
  • 举报
回复
呵呵,楼主厉害
conquersky 2004-12-12
  • 打赏
  • 举报
回复
mark 学习
nga96 2004-12-11
  • 打赏
  • 举报
回复
GC真的不好写,等写好了,去微软吧
linzsoft 2004-10-31
  • 打赏
  • 举报
回复
up
linzsoft 2004-10-30
  • 打赏
  • 举报
回复
谢谢
shuker(我是一只小花猪)
但这不是我想要的,有没有人能讲讲 垃圾回收的 mark and compact 是怎么具体实现的?
shuker 2004-10-28
  • 打赏
  • 举报
回复
http://dev.csdn.net/develop/article/23/23200.shtm
http://dev.csdn.net/develop/article/23/23201.shtm
linzsoft 2004-10-28
  • 打赏
  • 举报
回复
up
xiaohutushen 2004-10-28
  • 打赏
  • 举报
回复
up

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧