Java runtime systems: characterization and architectural implications
- 1 February 2001
- journal article
- Published by Institute of Electrical and Electronics Engineers (IEEE) in IEEE Transactions on Computers
- Vol. 50 (2) , 131-146
- https://doi.org/10.1109/12.908989
Abstract
The Java Virtual Machine (JVM) is the cornerstone of Java technology and its efficiency in executing the portable Java bytecodes is crucial for the success of this technology. Interpretation, Just-in-Time (JIT) compilation, and hardware realization are well-known solutions for a JVM and previous research has proposed optimizations for each of these techniques. However, each technique has its pros and cons and may not be uniformly attractive for all hardware platforms. Instead, an understanding of the architectural implications of JVM implementations with real applications can be crucial to the development of enabling technologies for efficient Java runtime system development on a wide range of platforms. Toward this goal, this paper examines architectural issues from both the hardware and JVM implementation perspectives. The paper starts by identifying the important execution characteristics of Java applications from a bytecode perspective. It then explores the potential of a smart JIT compiler strategy that can dynamically interpret or compile based on associated costs and investigates the CPU and cache architectural support that would benefit JVM implementations. We also study the available parallelism during the different execution modes using applications from the SPECjvm98 benchmarks. At the bytecode level, it is observed that less than 5 out of the 256 bytecodes constitute 90 percent of the dynamic bytecode stream. Method sizes fall into a trinodal distribution with peak of 1, 9, and 26 bytecodes across all benchmarks. The architectural issues explored in this study show that, when Java applications are executed with a JIT compiler, selective translation using good heuristics can improve performance, but the saving is only 10-15 percent at best. The instruction and data cache performance of Java applications are seen to be better than that of C/C/sub +/+ applications except in the case of data cache performance in the JIT mode. Write misses resulting from installation of JIT compiler output dominate the misses and deteriorate the data cache performance in JIT mode. A study on the available parallelism shows that Java programs executed using JIT compilers have parallelism comparable to C/C++ programs for small window sizes, but falls behind when the window size is increased. Java programs executed using the interpreter have very little parallelism due to the stack nature of the SVM instruction set, which is dominant in the interpreted execution mode. In addition, this work gives revealing insights and architectural proposals for designing an efficient Java runtime system.Keywords
This publication has 19 references indexed in Scilit:
- A hardware-driven profiling scheme for identifying program hot spots to support runtime optimizationPublished by Institute of Electrical and Electronics Engineers (IEEE) ,2003
- Java bytecode to native code translation: the Caffeine prototype and preliminary resultsPublished by Institute of Electrical and Electronics Engineers (IEEE) ,2002
- Accurate indirect branch predictionPublished by Institute of Electrical and Electronics Engineers (IEEE) ,2002
- Performance measurement of dynamically compiled Java executionsPublished by Association for Computing Machinery (ACM) ,1999
- Garbage collection and local variable type-precision and liveness in Java virtual machinesPublished by Association for Computing Machinery (ACM) ,1998
- Fast, effective code generation in a just-in-time Java compilerPublished by Association for Computing Machinery (ACM) ,1998
- PicoJava: a direct execution engine for Java bytecodeComputer, 1998
- Compilers for improved Java performanceComputer, 1997
- Compiling Java just in timeIEEE Micro, 1997
- picoJava-I: the Java virtual machine in hardwareIEEE Micro, 1997