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.
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.
From the table below, you can find plots of partitionings of the traces. The analyses include
pkg\scope | all | 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 |