Daniel Strmečki

Just-in-time Compilation in JVM

Is Java compiled or interpreted? The JVM cleverly uses both, finding your code's 'hotspots' and compiling them into native code at runtime for maximum performance.

Just-in-time Compilation in JVM
#1about 4 minutes

Understanding compiled versus interpreted programming languages

Programming languages are classified by their level of abstraction, requiring either compilation or interpretation to translate high-level code into machine-executable code.

#2about 4 minutes

How Java uses bytecode for platform portability

Java achieves portability by first compiling source code into platform-neutral bytecode, which is then interpreted and executed by the Java Virtual Machine (JVM).

#3about 5 minutes

Boosting performance with just-in-time compilation

The JIT compiler significantly improves performance by identifying and compiling frequently executed code sections, known as hotspots, into native machine code at runtime.

#4about 2 minutes

Comparing the C1 client and C2 server compilers

The JVM includes two JIT compilers: the C1 (client) compiler for fast startup and the C2 (server) compiler for better long-term performance optimization.

#5about 3 minutes

Achieving the best of both worlds with tiered compilation

Tiered compilation combines the C1 and C2 compilers, initially using C1 for quick startup and later switching to C2 for highly optimized code as more profiling data is collected.

#6about 3 minutes

Exploring the five levels of tiered compilation

The tiered compilation process involves five distinct levels, progressing from interpretation (level 0) through various C1 stages (levels 1-3) to full C2 optimization (level 4).

#7about 1 minute

Understanding deoptimization when assumptions fail

Deoptimization occurs when the JIT compiler's assumptions about code behavior are invalidated, causing the optimized native code to be discarded and the compilation process to restart.

#8about 5 minutes

How to configure and observe JIT compilation behavior

Developers can use JVM flags to disable tiered compilation, adjust compilation thresholds, and enable logging to observe the JIT compiler's behavior in real time.

#9about 2 minutes

Conclusion: Java is both a compiled and interpreted language

Java's hybrid model uses an interpreter for portability and a sophisticated JIT compiler for high performance, making it both a compiled and an interpreted language.

#10about 9 minutes

Audience Q&A on JIT compilation and performance

The speaker answers audience questions regarding compiler memory usage, direct-to-native compilation, performance thresholds, and comparisons with other languages like Go and Kotlin.

Related jobs
Jobs that call for the skills explored in this talk.

Software Engineer

tree-IT GmbH
Bad Neustadt an der Saale, Germany

Remote
Intermediate
Senior

Featured Partners

From learning to earning

Jobs that call for the skills explored in this talk.

Java Developer

Java Developer

Code First Girls

Intermediate
Java
DevOps
Python
JavaScript
Agile Methodologies