330 likes | 584 Views
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.
E N D
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
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
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
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)
Extra • Magic • Boot image
Byteocde Example 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 int align2grain(int i, int grain) { return ((i + grain-1) & ~(grain-1)); }