在引用计数算法中,对象的存活性可以通过引用关系的创建或删除直接判定,从而无须像追踪式回收器那样先通过堆遍历找出所有的存活对象,然后再反向确定出未遍历到的垃圾对象。
引用计数算法所依赖的是一个十分简单的不变式:
当且仅当指向某个对象的引用数量大于零时,该对象才有可能是存活的。
在引用计数算法中,每个对象都需要与一个引用计数相关联,这一技术通常保存在对象头部的某个槽中。
下述为一个简单的引用计数算法伪代码:
New():
ref<-allocate()
if ref == null
error "Out of memory"
rc(ref)<-0
return ref
/*Write方法用于增加新目标对象的引用计数,同时减少旧目标对象的引用计数,即使对于局部遍历的更新也需如此*/
atomic Writee(src,i,ref)