Optimizations in a private nursery-based garbage collector

This paper describes a garbage collector designed around the use of permanent, private, thread-local nurseries and is principally oriented towards functional languages. We try to maximize the cache hit rate by having threads continually reuse their individual private nurseries. These private nurseries operate in such a way that they can be garbage collected independently of other threads, which creates low collection pause times. Objects which survive thread-local collections are moved to a mature generation that can be collected either concurrently or in a stop-the-world fashion. We describe several optimizations (including two dynamic control parameter adaptation schemes) related to garbage collecting the private nurseries and to our concurrent collector, some of which are made possible when the language provides mutability information. We tested our collector against six benchmarks and saw single-threaded performance improvements in the range of 5-74%. We also saw a 10x increase (for 24 processors) in scalability for one parallel benchmark that had previously been memory-bound.

[1]  V. T. Rajan,et al.  Java without the coffee breaks: a nonintrusive multiprocessor garbage collector , 2001, PLDI '01.

[2]  Damien Doligez,et al.  Portable, unobtrusive garbage collection for multiprocessor systems , 1994, POPL '94.

[3]  Erez Petrank,et al.  A generational on-the-fly garbage collector for Java , 2000, PLDI '00.

[4]  J. Eliot B. Moss,et al.  Cycles to recycle: garbage collection to the IA-64 , 2000, ISMM '00.

[5]  Damien Doligez,et al.  A concurrent, generational garbage collector for a multithreaded implementation of ML , 1993, POPL '93.

[6]  Erez Petrank,et al.  Thread-local heaps for Java , 2002, ISMM '02.

[7]  Peter Lee,et al.  Generational stack collection and profile-driven pretenuring , 1998, PLDI.

[8]  Emery D. Berger,et al.  Automatic heap sizing: taking real memory into account , 2004, ISMM '04.

[9]  Amer Diwan,et al.  A Language-Independent Garbage Collector Toolkit , 1991 .

[10]  Witawas Srisa-an,et al.  Investigating the effects of using different nursery sizing policies on performance , 2009, ISMM '09.

[11]  Gabriel Kliot,et al.  A lock-free, concurrent, and incremental stack scanning for garbage collectors , 2009, VEE '09.

[12]  Francisco Tirado,et al.  Dynamic management of nursery space organization in generational collection , 2004, Eighth Workshop on Interaction between Compilers and Computer Architectures, 2004. INTERACT-8 2004..

[13]  Leslie Lamport,et al.  On-the-fly garbage collection: an exercise in cooperation , 1975, CACM.

[14]  Bjarne Steensgaard,et al.  Thread-specific heaps for multi-threaded programs , 2000, ISMM '00.

[15]  John H. Reppy,et al.  Status report: the manticore project , 2007, ML '07.

[16]  Andrew W. Appel,et al.  Simple generational garbage collection and fast allocation , 1989, Softw. Pract. Exp..