We base our design on the work on the Customisable Memory Management(CMM) system[AF]. In this framework, multiple independent heaps(including the usually non-collectable heap) can coexist with each other. Bartlett's mostly copying garbage collector is used as the primary collector. CMM extends the work of Bartlett[Bar88] by allowing cross heap pointers and unrestricted interior pointers.
However, all collectable objects are required to derive from a base class and reimplement a tracing method, which identifies the internal pointers of an object. This burden is usually quite small and in fact can be automated from the type definition15
One of the major advantages of the CMM framework is that multiple coorperating collectors can coexist at the same time, which makes it possible to customize the behavior of each collector with respect to the lifetime behavior of the objects. In [AF], examples are given in which the lifetime of certain class of objects exhibit first-in/first-out behavior. In this case a special collector can be written to take full advantage of this property.