The possible applications of Java range from small applets to large,
data-intensive scientific applications allocating memory in the
multi-gigabyte range. As a consequence copying garbage collectors can not
fulfill the requirements, as large objects can not be copied efficiently.
We analyze the allocation patterns and object lifespans for different Java
applications and present garbage collection techniques for these. Various
heuristics to reduce fragmentation are compared. We propose just-in-time
generated customized marker functions as a promising optimization during