|
Introduction to jvm
|
tarix | 07.11.2018 | ölçüsü | 1,08 Mb. | | #78947 |
|
“Overview of the IBM Java Just-in-Time”, T. Suganuma, T. Ogasawara, M. Takeuchi, T. Yasue, M. Kawahito, K. Ishizaki, H. Komatsu, T. Nakatani IBM Systems Journal, Volume 39 , No. 1, Pages: 175 – 193, ISSN:0018-8670 “Overview of the IBM Java Just-in-Time”, T. Suganuma, T. Ogasawara, M. Takeuchi, T. Yasue, M. Kawahito, K. Ishizaki, H. Komatsu, T. Nakatani IBM Systems Journal, Volume 39 , No. 1, Pages: 175 – 193, ISSN:0018-8670
Introduction to JVM Introduction to JVM Modifications to JVM(IBM JIT compiler) Optimization on extended bytecode Code generation details Example
What’s JVM(Java Virtual Machine)? What’s JVM(Java Virtual Machine)? Pros & Cons - Advantage:
- Platform-neutrality, flexibility, reusability
- Disadvantage:
- Performance penalty
- Run-time overhead for bytecode instruction fetch & decode
Many relative small method can lead to more frequent method invocation than other non-OOP languages Many relative small method can lead to more frequent method invocation than other non-OOP languages Synchronized methods or synchronized blocks cause run-time overhead by locking a given object for the duration of execution
Just-in-time (JIT) compiler Just-in-time (JIT) compiler - Converts the given bytecode instruction sequence at runtime before executing it natively
Pros & Cons of JIT compiler
Object layout
Execution of static initializer Execution of static initializer - Separate the resolution of a class from the execution of its static initializer
Before Change - A class is resolved at run-time, together with the execution of static initializer.
After Change - A class is resolved at compile-time. The static initializer is executed upon run-time calls.
Mixed execution Mixed execution - Interpretation + Compiled Code(JIT-generated code)
Rules (using JIT or not?) - Yes
- Hot methods(frequently invoked methods)
- Hot branches (frequently traversed branches)
- Loops included
- No
- Only executed once
- No loop included
Method inlining
Exception check elimination Exception check elimination
Common sub-expression elimination - Scalar Replacement
- Replace subscripted variables by local variable references and them available for register allocation
- Common effective address generation
- Partial redundancy elimination
- Reduce the number of accesses to instance variables
The JIT Compiler uses a table with pointers to the methods in the class. The JIT Compiler uses a table with pointers to the methods in the class. This internal table is used to compile the native code. Whenever the method is called the address is called. There is another table which maintains the addresses of the bytecode in case it is needed to be compiled.
The code is broken into tiles. Each loop is a tile and the code in between loops is another tile. The code is broken into tiles. Each loop is a tile and the code in between loops is another tile. Local variable usage is collected within each tile and a local variable table is prepared. - Stack variable registers
- Permanent cached local variable registers
- Temporary cached local variable registers
Circular allocation policy - Least recently used register
A table of frequently appearing bytecode sequences as idioms. A table of frequently appearing bytecode sequences as idioms. Reduce the stack height of expression evaluation. Exploits local variable cache registers by avoiding unnecessary move instructions between local and stack variables.
Checks whether two given types are related by a subclass relationship. Checks whether two given types are related by a subclass relationship. Runtime overhead. Cache mechanism for type inclusion testing. Given an object - Null check.
- Else, compared with the value of the cache that holds the successful class from the previous test.
- Else , JVM runtime library is checked and cache updated.
When an exception occurs, the JVM searches for the handler of the current method. When an exception occurs, the JVM searches for the handler of the current method. If not found, it pops the last frame off the stack and searches for the handler of the next method on the stack Till a handler is found or no more frames on the stack.
For known exceptions: For known exceptions: Each method is registered in an exception registration record. It is done for only those methods which have a try/catch block. It maintains an exception chain. During exceptions,a conditional jump is created to the bottom of the code.
Most code scheduling algorithms for static compilation, when the compilation time is not important. Most code scheduling algorithms for static compilation, when the compilation time is not important. A code scheduler works with the code generator for a basic block. When a native code is generated, it is given to the scheduler with some attributes, like reference registers, exception flag, address of memory access etc. The scheduler considers the dependencies and arranges the code. Has to guarantee proper execution. Cannot reorder two instructions which may raise exceptions.
Dostları ilə paylaş: |
|
|