Chapter 4. Working with the JIT
The just-in-time (JIT) compiler is the heart of the Java Virtual Machine. Nothing in the JVM
affects performance more than the compiler, and choosing a compiler is one of the first de-
cisions made when running a Java application—whether you are a Java developer or an end
user. Fortunately, in most situations the compiler needs little tuning beyond some basics.
This chapter covers the compiler in depth. It starts with some information on how the com-
piler works and discusses the advantages and disadvantages to using a JIT compiler. Then it
moves on to which kinds of compilers are present within which versions of Java: understand-
ing this and choosing the correct compiler for a situation is the most important step you must
take to make applications run fast. Finally, it covers some intermediate and advanced tunings
of the compiler; these tunings can help get those last few percentage points in the perform-
ance of an application.
Just-in-Time Compilers: An Overview
Some introductory material first; feel free to skip ahead if you understand the basics of just-
Computers—and more specifically CPUs—can execute only a relatively few, specific in-
structions, which are called assembly or binary code. All programs that the CPU executes
must therefore be translated into these instructions.
Languages like C++ and Fortran are called compiled languages because their programs are
delivered as binary (compiled) code: the program is written, and then a static compiler pro-
duces a binary. The assembly code in that binary is targeted to a particular CPU. Comple-
mentary CPUs can execute the same binary: for example, AMD and Intel CPUs share a ba-
sic, common set of assembly language instructions, and later versions of CPUs almost al-
ways can execute the same set of instructions as previous versions of that CPU. The reverse
is not always true; new versions of CPUs often introduce instructions that will not run on
older versions of CPUs.