Transcript Document
Java Virtual Machine
Case Study on the Design of
JikesRVM
JVM
• JVM runs Java application in bytecode
– Other sources can also be compiled to
bytecode
– JVM is a process virtual machine
• Hardware support exists
– Execution by
• Interpreter
• JIT (just-in-time) compilation: HotSpot, JikesRVM
JikesRVM
• Originally Jalapeno
• A research compiler by IBM written mostly
in Java
– Why Java?
• Software engineering
• Bridging gap between runtime servers and user
code
• Most used research JVM in academics
Design Goals
• Exploitation of high-performance
processors
• SMP scalability
• Thread limits
• Continuous availability
• Rapid response
• Library usage
• Graceful degradation
Object Model and Memory Layout
• Field and array access should be fast
• Virtual method dispatch should be fast
• Null pointer checks should be performed
by the hardware
• Other Java operations should not be
prohibitively slow
Array and Scalar Object Layout
Object Header
• TIB (type information block)
– Reference to the object’s class
– An array of objects
• Class
• Compiled methods
– Array of instructions
• Status
– Locking field
– Hashing field
– Memory management
JTOC (JikesRVM Table of Contents)
Method Invocation Stack
Runtime Subsystem
•
•
•
•
Exceptions
Dynamic class loading
Input/Output
Reflection
Exceptions
• Exceptions
–
–
–
–
–
Null pointer exception by hardware
Out of bound
Divided by zero
Method invocation stack overflow
Software-generated exceptions
• Handling
– Caught by a C interrupt handler and pass to
deliverException method
– deliverException collects stack trace, transfer control
to “try” block if exists
Dynamic Class Loading
• Java can load classes during execution
• In JikesRVM, when a class not loaded is
referred
– Generate code to load, resolve and instantiate
the class before execution
• Subtleties for address resolution
Input and Output
• Use OS’ services through system routine
calls
Reflection
• Reflection: runtime access to fields and
runtime invocation of methods
– For fields, JVM keep tracks type information
– For method invocation, need to match the
signature
public int incrementField(String name, Object obj) throws...
{ Field field = obj.getClass().getDeclaredField(name);
int value = field.getInt(obj) + 1;
field.setInt(obj, value);
return value; }
Threads and Synchronization
• JikesRVM implemenst virtual processor as
pthreads
– Java threads are multiplexed on virtual processors
– One virtual processor for each physical processor
• Locks
– Processor lock ( a java object with a field denting
owner)
– Thin lock: use lock field on an object header
– Thick lock: object level lock with a queue of threads
waiting for thelock
Memory Management
• Java is an automatic memory managed
language
• Memory management is most critical for
Java
– We will spend several weeks on this topic
• In JikesRVM (obsolete)
– A family of memory managers
Choices
• Copying or non-copying collectors
• Incremental/concurrent or stop-the-world
• Generational collectors
– Most objects die young
– Minor collection, major collection
– Remember set
Compiler
• JikesRVM provides three compilers
– Baseline compiler
• More of an interpreter
• Easy to develop and verify
– Quick (fast) compiler
• Balance compile-time and execution time
– Optimizing compiler
• Deliver high-quality code with likely long
compilation time
Quick Compiler
• Compile each method as it executes for
the first time
• Apply a few highly effective optimizations
– Minimal transformation
– Decorate the byte code and optimized with
• Copy propagation
• Register allocation
Optimizing Compiler
• For frequently executed method
– Need a profiler
– Dynamic versus adaptive
Optimizing Compiler Structure
Optimizations
• HIR (n-tuple, register-based IR)
– Local optimizations: CSE, elimination of
redundant load
– Flow-insensitive optimizations: dead code
elimination
– In-lining
Optimizations
• LIR (adopt object layout and calling
convention)
– Larger than HIR
– Local CSE
• MIR (machine specific)
– Instruction selection using BURS
– Live variable analysis
– Register allocation (linear scan)
Compilation Speeds
Performance on SPEC JVM98
Extra
• Magic
• Boot image
Byteocde Example
int align2grain(int i, int grain)
{ return ((i + grain-1) & ~(grain-1)); }
Method int align2grain(int,int)
0 iload_1
1 iload_2
2 iadd
3 iconst_1
4 isub
5 iload_2
6 iconst_1
7 isub
8 iconst_m1
9 ixor
10 iand
11 ireturn