Implements an incremental cyclic garbage collector. By collecting the old generation in increments, there is no need for a full heap scan. This can hugely reduce maximum pause time for programs with large heaps.
Reduces the number of generations from three to two. The old generation is split into two spaces, "aging" and "collecting".
Collection happens in two steps:: * First, the young generation is scanned and the survivors moved to the end of the aging space. * Then objects are taken from the collecting space, at such a rate that all cycles are collected eventually. Those objects are then scanned and the survivors moved to the end of the aging space. When the collecting space becomes empty, the two spaces are swapped.