Characterizing the Memory Behavior of Java Workloads

Yefim Shuf
yshuf@cs.princeton.edu

Abstract

The Java Programming Language is gaining popularity as the language of choice for developing applications on a variety of platforms, ranging from servers to embedded systems. At the same time, the growing disparity between processor and memory speeds makes it important to study and optimize the memory behavior of programs.

The goal of this work is to understand the memory behavior of important Java workloads used in benchmarking JVMs and JIT compilers and to provide computer architects and the implementors of JVM components with structured information (at different levels of detail) about the Java workloads.

We first study high-level characteristics of these Java workloads, which are completely independent of the hardware configuration. We then obtain, based on simulation, a series of increasingly detailed data on the behavior of these programs with respect to the data TLB and caches.  In the process, we make interesting discoveries about TLB behavior and limitations of data prefetching schemes discussed in the literature. As a result, we develop a set of recommendations to computer architects and JVM developers on techniques to run Java programs more efficiently, and evaluate some of the techniques discussed in the literature.

This work also makes the first attempt to compare the characteristics of SPECjvm98 to those of a server-oriented benchmark, pBOB, and explain why the current set of SPECjvm98 benchmarks may not be adequate for a comprehensive and objective evaluation of JVMs and JIT compilers.

This is a joint work with Mauricio J. Serrano (Intel Research), Manish Gupta (IBM Research), and  Jaswinder Pal Singh (Princeton).