RAMCloud's log cleaner is basically a specialized copying generational garbage collector. This page contains a number of references for anyone interested in reading up on garbage collection.
- "The Garbage Collection Handbook: The Art of Automatic Memory Management" by Jones, Hosking, and Moss (2012)
- "Garbage Collection: Algorithms for Automatic Dynamic Memory Management" by Jones and Lins (1996; predecessor of the above)
Both of these are in the lab (Gates 444).
- "Uniprocessor Garbage Collection Techniques" by Paul R. Wilson (1992)
- Expanded ~60-page version of the above:
- Wilson also has a survey of manual dynamic memory allocators ("Dynamic Storage Allocation: A Survey and Critical Review"):
- Ben Zorn did a ton of research in evaluating GC performance. He has a PhD thesis dedicated to the topic, as well as followup papers like "The measured cost of conservative garbage collection".
- Two historical papers are John McCarthy's "Recursive functions of symbolic expressions and their computation by machine" and George E. Collins' "A method for overlapping and erasure of lists", both from 1960. Neither are good references for learning about garbage collection, but they are apparently the origins of mark-sweep and reference counting collection, respectively.
Common GC Implementations
- Hans Boehm's conservative C/C++ garbage collector (often called "Boehm GC", I think) is widely used. His home page has a bunch of papers on many GC topics (http://www.hpl.hp.com/personal/Hans_Boehm/pubs.html) and his Boehm GC page has what appears to be lots of good further reading (http://www.hpl.hp.com/personal/Hans_Boehm/gc/index.html).
- Java GCs are probably some of the most widely-used. Java comes with a handful of different collectors and there are companies that sell others. Here are a few links: