On-line JavaTM Data Traces

By Milo M. Martin and Manoj Plakal


[ Overview  |  Trace Details  |  Benchmark Descriptions  |  Download Traces  |  Our Project ]

Java interpreter patch now publicly available

Our Project:

Top-Level Data Memory Hierarchy: Java vs C++

by Milo Martin, Manoj Plakal, and Venkatesh Iyengar

These Java traces were generated as part of a project for CS752: Advanced Computer Architecure I, instructed by Prof. Mark D. Hill, Fall 1996, Computer Sciences Department, University of Wisconsin-Madison.
Abstract
Using memory reference trace based cache simulation, we studied the data cache behavior of Java bytecode programs (not the cache behavior of the Java interpreter).  In addition, we compare this behavior to the data cache behavior of equivalent C++ programs.  Our results suggest that caching each type of different memory access in Java (operand stack, locals, and heap references) is advantageous to exploit the high locality of the operand stack and locals.  The Java programs tested performed more memory accesses and on average had more cache misses than the equivalent C++ program.  This result suggest that Java might require a more aggressive memory system to achieve equivalent performance.

Documents
Presentation slides (gzipped Postscript, 38K)
Project report (gzipped Postscript, 36K)

Differences between on-line traces and traces used for data in the project
The traces placed on-line are not identical to the traces used for the project data.  After completing the project we regenerated the traces to reflect a number of improvement.  Some of these improvements include using large problem sizes, newer versions of some of the programs, using optimization (-O2) when compiling the C++ programs, and using the -O javac optimization parameter for the Java programs.  We believe these traces we have made available on-line are an improvement from what we used for our project.

Disclaimer
This work was for a class project, and thus the work was performed over a one month period. Due to the lack of a reasonable benchmark suite for Java at this time, the benchmarks used are mostly ``toy'' programs.  In addition the C++ programs that were traced were compiled with no optimization flags set. This appears to have inflated the number of C++ memory references. Furthermore, we did not consider garbage collection, multi-threading, exception handling, native code methods (e.g.the AWT graphics libraries). However, we do believe that the general trend of the data is correct and that the conclusions we drew are valid.

Related Work


[ Overview  |  Trace Details  |  Benchmark Descriptions  |  Download Traces  |  Our Project ]


[note]Last updated on Feb 29 1996