Just-In-Time (JIT) compiler is valuable Java related technology that dynamically compiles selected bytecode methods of executing Java applications into native (binary code) methods, thus greatly reducing the overall execution time of such applications.  IBM's JIT compilers provided with various configurations of J9VM are all based on the same advanced  technology adapted for effective use with Java ME CLDC, Java ME CDC, Java SE, and Java EE configurations of J9VM.  Specifically, the "embedded" JIT compiler used in Apogee's JREs does not implement, due to limited memory and CPU resources of targeted devices, the same set of optimizations that are implemented  in the "desktop" JIT compiler, and does not include certain non-essential features that tend to increase the runtime footprint.  However, this embedded JIT still implements all of the "high payoff" optimizations, which means that it typically achieves the 5 to 8 times runtime speed-ups of compiled Java applications compared with interpretive execution of such applications, while having the minimum overhead and small runtime footprint.

IBM JIT compiler technology is highly configurable and tunable for achieving the highest possible speed-ups of Java applications when subjected to JIT compilation. Specifically, it allows:
  • Turning on/off the individual optimizations.
  • Controlling of the amount of memory allocated for compiled data.
  • Instructing the compiler which bytecode methods are to be compiled.
  • Instructing the compiler which bytecode methods should not be compiled.
  • Instructing the compiler when the compile methods based on the number of invocations.
  • Tracing and debugging the JIT execution
  • Compiling the bytecode methods on the application or separate thread.
JIT behavior is controlled via -Xjit[:opt=val] directive, where available options include:

 Option  Description
 bcount=  number of calls before compiling methods with loops
 count=  number of calls before compiling methods with no loops
 disableArrayCopyOpts  disable array copy optimiations
 disableDirectMemoryOps  disable generation of direct memory instructions
 disableDirectToJNI  disable direct calls to JNI
 disableFPCodeGen  disable floating point code generation
 disableFPEmulation  disable floating point emulation
 disableGRA  disable global register allocator
 disableInlining  disable inlining
 disableLocalCSE  disable local common subexpression elimination
 disableLocalVP  disable local value propagation
 disableScheduling  disable instruction scheduling
 disableTreeSimplification  disable tree simplification
 enableCompilationThread  enable compilation on a separate thread
 help  display help information
 bcLimit=  maximum bytecode size of the method
 codetotal=      maximum size of memory (KB) allocated for compiled data
 exclude=  do not compile methods beginning with XXX
 limit=  only compile methods beginning with XXX
 verbose  write compiled method names to stdout