java virtual machine case study on the design of jikesrvm

Post on 13-Jan-2016

226 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related