Markus Weninger Markus Weninger - 2 months ago 45x
Java Question

What exactly does -XX:-TieredCompilation do?


java -XX:+PrintFlagsFinal
I found the
flag, and I read about it a bit online.

Yet, I still don't know exactly what happens when setting it to

I know that the compilation system supports 5 execution levels, basically splitted into interpreter, C1 and C2:

  • level 0 - interpreter

  • level 1 - C1 with full optimization (no profiling)

  • level 2 - C1 with invocation and backedge counters

  • level 3 - C1 with full profiling (level 2 + MDO)

  • level 4 - C2


Two questions:

(1) By setting
, are some of this levels just disabled? If yes, which?

(2) Is there some flag to decide whether to disable C1 or C2, or to not compile at all?


-XX:-TieredCompilation disables intermediate compilation tiers (1, 2, 3), so that a method is either interpreted or compiled at the maximum optimization level (C2).

As a side effect TieredCompilation flag also changes the number of compiler threads, the compilation policy and the default code cache size. Note that with TieredCompilation disabled

  • there will be less compiler threads;
  • simple compilation policy (based on method invocation and backedge counters) will be chosen instead of advanced compilation policy;
  • default reserved code cache size will be 5 times smaller.

To disable C2 compiler and to leave only C1 with no extra overhead, set -XX:TieredStopAtLevel=1.

To disable all JIT compilers and to run everything in interpreter, use -Xint.