Chapter 6. Code Execution on the JVM

The two main services that any JVM provides are memory management and an easy-to-use container for execution of application code. We covered garbage collection in some depth in Chapters 4 and 5, and in this chapter we turn to code execution.

Note

Recall that the Java virtual machine specification, usually referred to as the VM spec, describes how a conforming Java implementation needs to behave.

The VM spec defines execution of Java bytecode in terms of an interpreter. However, broadly speaking, interpreted environments have unfavorable performance as compared to programming environments that execute machine code directly. Most production-grade modern Java environments solve this problem by providing dynamic compilation capability.

As we discussed in Chapter 3, this ability is otherwise known as just-in-time compilation, or just JIT compilation. It is a mechanism by which the JVM keeps track of which methods are being executed to determine whether individual methods are eligible for compilation to directly executable code.

In this chapter, we start by laying out the basic lifecycle of a Java application, as it typically happens today. Then, we provide a brief overview of bytecode interpretation and why HotSpot is different from other interpreters that you may be familiar with.

We then turn to the basic concepts of JIT compilation and profile-guided optimization. We discuss the code cache and then introduce the basics of HotSpot’s compilation ...

Get Optimizing Cloud Native Java, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.