  Although the advantages of just-in-time compilation over traditional
interpretive execution are widely recognised, there needs to be more current
research investigating and repositioning the performance differences between
these two execution models relative to contemporary workloads. Specifically,
there is a need to examine the performance differences between Java Runtime
Environment (JRE) Java Virtual Machine (JVM) tiered execution and JRE JVM
interpretive execution relative to modern multicore architectures and modern
concurrent and parallel benchmark workloads. This article aims to fill this
research gap by presenting the results of a study that compares the performance
of these two execution models under load from the Renaissance Benchmark Suite.
This research is relevant to anyone interested in understanding the performance
differences between just-in-time compiled code and interpretive execution. It
provides a contemporary assessment of the interpretive JVM core, the entry and
starting point for bytecode execution, relative to just-in-time tiered
execution. The study considers factors such as the JRE version, the GNU GCC
version used in the JRE build toolchain, and the garbage collector algorithm
specified at runtime, and their impact on the performance difference envelope
between interpretive and tiered execution. Our findings indicate that tiered
execution is considerably more efficient than interpretive execution, and the
performance gap has increased, ranging from 4 to 37 times more efficient. On
average, tiered execution is approximately 15 times more efficient than
interpretive execution. Additionally, the performance differences between
interpretive and tiered execution are influenced by workload category, with
narrower performance differences observed for web-based workloads and more
significant differences for Functional and Scala-type workloads.
