|
Pretenuring can
reduce copying costs in garbage collectors by allocating long-lived
objects into regions that the garbage collector will rarely, if ever,
collect. We extend previous work on pretenuring as follows. (1) We
produce pretenuring advice that is neutral with respect to the garbage
collector algorithm and configuration. We thus can and do combine advice
from different applications. We find for our benchmarks that predictions
using object lifetimes at each allocation site in Java programs are
accurate, which simplifies the pretenuring implementation. (2)We gather
and apply advice to both applications and Jikes RVM, a compiler and
run-time system for Java written in Java. Our results demonstrate that
building combined advice into Jikes RVM from different application
executions improves performance regardless of the application Jikes RVM
is compiling and executing. This build-time advice thus gives
user applications some benefits of pretenuring without any application
profiling. No previous work uses profile feedback to pretenure in the
run-time system. (3) We find that application-only advice also
consistently improves performance, but that the combination of
build-time and application-specific advice is almost always noticeably
better. (4) Our same advice improves the performance of generational,
Older First, and Beltway collectors, illustrating that it is
collector neutral. (5) We include an immortal allocation
space in addition to a nursery and older generation, and show that
pretenuring to immortal space has substantial benefit. |