A Unified Theory of Garbage Collection (2004) [pdf]
This is a classic paper that&#x27;s a must-read for anyone interested in GC. The basic idea is that not only is reference counting a form of garbage collection, there&#x27;s actually a <i>continuum</i> of GC approaches between pure tracing and pure reference counting. Each algorithm has its tradeoffs, and, crucially, most optimizations—for example, generational garbage collection—actually just move the scheme toward the opposite pole, acquiring some of the upsides and downsides of the other algorithm. Viewed through this lens, most of what we would consider well-optimized GCs deployed in the wild (Java HotSpot, .NET, modern JS engines, etc.) are really best viewed as hybrids of tracing and reference counting, balancing the upsides and downsides of each approach.