Generational techniques have been very successful in reducing the impa
ct of garbage collection algorithms upon the performance of programs.
However, all generational algorithms occasionally promote objects that
later become garbage, resulting in an accumulation of garbage in olde
r generations. Reclaiming this tenured garbage without resorting to co
llecting the entire heap is a difficult problem. In this paper, we des
cribe a mechanism that extends existing generational collection algori
thms by allowing them to reclaim tenured garbage more effectively. In
particular, our dynamic threatening boundary mechanism divides memory
into two spaces, one for short-lived, and another for long-lived objec
ts. Unlike previous work, our collection mechanism can dynamically adj
ust the boundary between these two spaces either forward or backward i
n time, essentially allowing data to become untenured. We describe an
implementation of the dynamic threatening boundary mechanism and quant
ify its associated costs. We also describe a policy for setting the th
reatening boundary and evaluate its performance relative to existing g
enerational collection algorithms. Our results show that a policy that
uses the dynamic threatening boundary mechanism is effective at recla
iming tenured garbage.