Java Object Demographics

These webpages supplement the data presented in our ISMM 2008 paper A Study of Java Object Demographics, Richard Jones and Chris Ryder. The traces were generated with MemTrace Jikes RVM, version 2.3.3; the benchmarks used came from the SPEC jvm98 suite, version 1.03_05, and the DaCapo benchmark beta 041020. However, we hope to release a new version of the traces based on more recent versions of Jikes RVM and DaCapo.

Methodology outline

The methodology used in this work is described in our paper. However, in brief, we proceed as follows.

We use this test to partition sites into clusters of sites whose objects exhibit similar lifetime distributions. We use a version of Jikes RVM instrumented with MemTrace. Memtrace modifies the compiler to cause it to emit records of allocation sites as it compiles methods, and to modify allocation routines to emit object allocation records. Each object is stamped with its date of birth and the identifier of the site that allocated it. We force GC at frequent intervals and use GCspy technology to scan the heap, emitting a record for each object that has died. Because we are primarily interested in the behaviour of application objects, we use the baseline compiler.

The MemTrace traces are summarised to give an object lifetime histogram for each allocation site. By default, we use 2000 buckets for the histograms. We compare the histograms, or rather the cumulative frequency curves derived from the histograms, of two allocations using the Kolmogorov-Smirnov Two Sample test. We use this test to partition sites into clusters of sites whose objects exhibit similar lifetime distributions.

In the data presented here, we used a confidence level of 1%. However, we have experimented with larger values and we intend to publish those results here soon. Broadly, we find that a value of 2.5% leads to more clusters than using 1% but higher values (5-10%) do not lead to any further increase in the number of clusters.

Analyses

From the table below, you can find plots of partitionings of the traces. The analyses include

We distinguish allocations sites by the location of the allocation site and the dynamic scope of the allocation. The site is located in a package, which is one We are also interested in whether the allocation was made on behalf of the application or the virtual machine (i.e. the compiler). We consider two scopes
pkg\scopeall default compiler
all all all+default all+compiler
applic applic+all applic+default
Java java+all java+default java+compiler
Jikes jikes+all jikes+default jikes+compiler