2007年11月14日星期三

Heap实现

今天把Heap实现了,GC下的Heap非常简单方便。
当Mask动作完成后就对Heap作Compacting操作(紧缩)。没了碎片没了垃圾。目前的想法事先做一个Heap.分代收集还得考虑一下。应该是需要多个子Heap.
昨天把分代的想法放在Ref node link是不可行的,耗费太大。因为需要大量移除操作,所以可能需要双向链表,太浪费了。还要思考一下。应该是Mask的时候是针对所有的对象Mask, 分代只是在收集的时候才有区分,因为收集操作是最耗时间的。

紧缩算法很简单,稍微思考一下主要防止移动之后的读取错误(写后读),就是先按照对象长度移动指针,然后在把这个对象剪切到堆尾。因为对象长度可能超过队尾到当前的距离,所以剪切会破坏当前的数据。

紧缩的过程中需要修改Ref node 的指针,所以Object 加了一个域存储Ref node.暂时的方案,有点浪费,到时候再看有没有简单的办法。

0 COMMENTS: