  Automatic garbage collection (GC) prevents certain kinds of bugs and reduces
programming overhead. GC techniques for sequential programs are based on
reachability analysis. However, testing reachability from a root set is
inadequate for determining whether an actor is garbage because an unreachable
actor may send a message to a reachable actor. Instead, it is sufficient to
check termination (sometimes also called quiescence): an actor is terminated if
it is not currently processing a message and cannot receive a message in the
future. Moreover, many actor frameworks provide all actors with access to file
I/O or external storage; without inspecting an actor's internal code, it is
necessary to check that the actor has terminated to ensure that it may be
garbage collected in these frameworks. Previous algorithms to detect actor
garbage require coordination mechanisms such as causal message delivery or
nonlocal monitoring of actors for mutation. Such coordination mechanisms
adversely affect concurrency and are therefore expensive in distributed
systems. We present a low-overhead reference listing technique (called DRL) for
termination detection in actor systems. DRL is based on asynchronous local
snapshots and message-passing between actors. This enables a decentralized
implementation and transient network partition tolerance. The paper provides a
formal description of DRL, shows that all actors identified as garbage have
indeed terminated (safety), and that all terminated actors--under certain
reasonable assumptions--will eventually be identified (liveness).
