Two-Finger算法
Two-Finger算法由Saunders提出,比起典型的标记-压缩算法,只需要2次搜索堆,并且Two-Finger算法没有必要为forwarding指针准备空间,只需要在原对象的域中设定forwarding指针即可。但是Two-Finger算法的前提是:必须所有对象大小相等。
两次搜索堆分为:移动对象和更新指针两次操作。
首先,移动对象由堆的free和live指针从两边相中间搜索,free指向空闲空间,live指向活动对象,当两指针交叉时则步骤移动对象结束。这里两个指针就像两个手指,Two-Finger命名也由此而来。类似这种生动有趣的命名方式还有冒泡排序等。
具体我们结合图片说明.如图所示,当free指向空闲空间live指向活动对象时,则将Live指向的对象移动至Free指向的空闲空间,而Live原来指向的空间也就成为空闲空间。
此时,交换完毕后,Live指针和Free指向都向中间移动,直到Free指向最近的空闲空间后停止,Live指向最近的活动对象后停止,如下图: