In a generational garbage collector, a pre-tenured object is one that is allocated directly in the old generation. Pretenuring long-lived objects reduces the number of times that they are scanned or copied during garbage collection. Previous work has investigated pre-tenuring based on off-line analysis of execution traces. This paper builds on that work by presenting a dynamic technique in which the decision to pre-tenure a particular kind of object is taken at run-time. This allows decisions to depend on the inputs of a particular application run and also allows decisions to be changed as the application enters different phases. An implementation is presented for the ResearchVM Java Virtual Machine.
Timothy L. Harris