1位引用计数法
1位引用计数法(one bit reference counting)由三位计算机科学家W.R.Stoye,T.J.W.Clarke,A.C.Norman提出。根据这三位科学家观察,“几乎没有什么对象是公用的,所有对象都能马上回收”。
因此,三位科学家提出只用1b来计数。1b固然只有0,1两种表示法。当计数器为0时表示只有1个引用,当计数器为1时表示被多个引用。有意思的是,三位科学才采用不一样的计数思维来解决难题。传统的技术法中计数器在对象自己本身中技术,而在1位引用计数法中,对数器由指向对象的对象指针中技术。判断是否回收时,若计数为0表示有且只有自己引用对方则自己不引用时就将对方回收。若计数为1则表示除了自己还有其他引用对方的对象,那么自己引用时则不能回收对方。
我们以下图举个例子:
图中原本A指向C,B指向D。这时A要取消指向C取而代之的是指向D,此刻A先判断自己是1还是0,这里是1则不回收C。然后将B指针复制给A,这里D又多了个指向,所以B和A
计数器为1。
代码实现也比较简单,伪代码如下:
算法优点:
计数器位数减少,每个对象所占用的内存空间也减少,并且当A引用理他地址很远的C时,以往的算法需要读取C的计数器,而这里只需读取A。这有利于Cache缓存,大大提高了程序效率。