ABSTRACT: Garbage collection is an important features of modern programming languages: by liberating the programmer from the responsibility of freeing up unused memory by hand, it leads to code with fewer bugs and cleaner design. However, these software engineering benefits have their costs: garbage collection may incur annoying pauses, slowdowns, and increased memory requirements. This talk presents a novel family of garbage collection algorithms that use information about the connectivity of heap objects to reduce these costs. I first present empirical data showing that connectivity information is a good indicator for when objects die. Then I describe a family of garbage collectors that exploit connectivity properties to yield short pause times, good throughput, and low memory footprint. As part of implementing this collector, I developed the first non-trivial pointer analysis that handles all of Java, including dynamic class loading, reflection, and native code. I present an evaluation of connectivity-based garbage collection and the pointer analysis.