Introduction to jvm



Yüklə 1,08 Mb.
tarix07.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

  • Requires run-time exception checking to ensure validity of accesses to objects and arrays

  • 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

  • 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

  • Method inlining



Exception check elimination

  • Exception check elimination



Common sub-expression elimination

  • Common sub-expression elimination

    • Scalar Replacement
      • Replace subscripted variables by local variable references and them available for register allocation
    • Common effective address generation
      • Reduce register pressure
    • 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.

  • 3 types of registers

    • 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.





  • Questions



Yüklə 1,08 Mb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə