|
四、失败处理策略和无用单元回收
如果遇到因内存不足而无法满足一个存储请求,存储管理器可以有两种行为:一是什么都不做,直接返回一个系统错误信息;二是使用失败处理策略(
failure policy )来满足请求。
最彻底的失败处理策略是无用单元收集。所谓无用单元是指那些可以回收而没有回收的结点空间。高级程序设计语言中,程序员常犯的一种错误就是动态生成变量或对象并使用它们之后,忘记了释放其内存空间,以后却又不再使用它们。也可能是由于程序要做到及时释放无用单元有困难。
这种丢失的存储空间称为无用单元( garbage ),也称为内存泄漏( memory leak
)。这些无用结点的存在会影响空间使用的效率。因此存储管理系统要有能力把这些无用结点找出来,并送回到可利用空间表中去。通常的作法是:首先普查一次内存,把那些已经不属于任何链上的结点打上标志,然后将它们收集到可利用空间表中,回收过程通常还可与存储压缩一起进行。
对于无用单元的回收有很多算法,包括引用计数算法、标记/清除算法等。Deutsch-Schorr-Waite算法是一种比较有效的标记/清除方法。 |