Systems that store objects at a large number of sites require fault-tolerant and timely
garbage collection. A popular technique is to trace each site independently using
inter-site object references as roots. However, this fails to collect cyclic garbage
spreads across sites. We present an algorithm that collects cyclic garbage by involving
only the sites containing it.
Our algorithm is based on finding objects highly likely to be cyclic garbage and tracing
backward from them to check if they are reachable from any root. We present efficient
techniques that make conducting such traces practical. The algorithm collects all
distributed cyclic garbage, is safe in the presence of concurrent mutations, and has low
space and time overhead.