R. Kent Dybvig, David Eby, and Carl Bruggeman, Don't stop the BIBOP: Flexible and efficient storage management for dynamically-typed languages, Indiana University technical report #400, March 1994 (bibtex).
This paper describes a storage management system that is flexible and efficient. The representation of run-time tags yields fast allocation, type testing, and field extraction, and the memory model reduces virtual memory paging during garbage collection. The storage management system coexists gracefully with other languages' run-time systems, facilitating the use of multiple languages within a single program. No special support from the operating system or virtual memory manager is required beyond the ability to obtain additional memory on demand. The system incorporates a generational garbage collector with a tunable number of dynamically resizable generations. The collector handles large objects efficiently, supports collection of incrementally compiled code, supports weak pairs, and allows stacks to contain nonpointer data. The system's hybrid type representation employs typed pointers and typed objects for tagging individual objects, and BIBOP typing for classifying objects according to coarser-grained type characteristics mostly of concern only to the collector. A segmented memory model is used, but segmentation is handled transparently outside of the collector so that nearly all types of objects are allocated inline from a single linear allocation area using a single allocation pointer. The storage management system has been implemented and is in use as part of a high-performance production implementation of Scheme.