Next | Up


What is reference counting

Reference counting is not full garbage collection, since it cannot detect detached cycles of unreference objects. However it is of use in limited domains where cycles are not generated. An example is in OS's where the mapping between resources and resource-users is maintained via reference counting.

Each object that is the destination of a pointer has a count field, and this is maintained to record exactly how many pointers exist that point to the object. The operations of allocating/pointer-creation, duplicating a pointer, and destroying a pointer all have to maintain this count.

When the act of destroying a pointer reduces count to zero, then the object is garbage and is reclaimed (if it itself contains pointers, then these are recursively subject to the destroy-pointer operation).


Problems with reference counting

Despite being a very straightforward technique, most languages and compilers supporting pointers do not support the hooks required on pointer creation, duplication and deletion, and so it has to be explicitly coded, and the cases of pointer duplication have to be accurately identified by the programmer.

It is quite inefficient - no other technique involves any overhead in copying pointers, for instance, nor of recursively visiting an objects contents when the last pointer to it vanishes.

It doesn't detect or reclaim cycles.

It requires a count field in each object.


Advantages of reference counting

It recycles dead objects immediately upon their becoming unreachable - promptness - which is very useful for finalization purposes.

It is easy to implement correctly, and objects to do not have to be moved or copied.


Last updated by markt@chaos.org.uk Tue 16 January 1996