JVM Configurations

Manish Goyal
3 min readFeb 8, 2023

--

Recommended learning path:
Start with the basics
— Strong understanding of Java Fundamentals
— Multithreading, and Memory Management

JVM Fundamentals
— Learn about the architecture of the JVM
— Class loading
— Lifecycle of an object in Java

JVM Performance Tuning
— Setting the heap size
— Adjusting the Garbage Collector
— Tuning JVM flags
— Garbage Collection Algorithms

Advanced JVM Configurations
— JIT compilers
— JVM diagnostics and debugging
— Performance monitoring tools

JVM architecture

JVM architecture can be divided into three main components:

JVM Performance Tuning

What is it?

The process of optimizing the JVM’s behavior to improve the performance of a Java application.

How does it help?

JVM provides a lot of configuration options that can be adjusted to improve performance.

JVM Performance Tuning Key Areas

Memory Management

  • Initial heap size and maximum heap size

Ex : To set the initial heap size to 256 MB and the maximum heap
size to 512 MB
java -Xms256m -Xmx512m MyMainClass

  • Frequency of garbage collection

-XX:+UseG1GC

Enables the G1 (Garbage-First) garbage collector, which is a concurrent and parallel collector that provides low latency and predictable pauses.

-XX:MaxGCPauseMillis=<value>:

Specifies the maximum pause time goal for the G1 garbage collector in milliseconds. But it’s not a guarantee.

-XX:GCTimeRatio=<value>:

Specifies the ratio of time spent in garbage collection versus application-level processing.

-Xmn

Specifies the size of the young generation heap.

Types of Garbage Collector

JIT compiler settings

JIT (Just-In-Time) compiler is a component of the Java Virtual Machine (JVM) that compiles Java bytecode into machine code at runtime.

JIT compiler settings can be adjusted to fine-tune the performance of a Java application.

Here are some common JIT compiler settings in Java:

-XX:+PrintCompilation: This option enables the printing of information about each compilation performed by the JIT compiler.

-XX:CompileThreshold: This option sets the number of method invocations or loops before the JIT compiler compiles the method.

-XX:CICompilerCount: This option sets the number of compiler threads used by the JIT compiler.

  • XX:TieredCompilation: This option enables tiered compilation, which is a two-level JIT compiler approach that uses the client compiler for a faster startup and the server compiler for improved runtime performance.

Thread Management

Configuring thread stack size:

The thread stack size can be configured using the -Xss option

Example Usage: java -Xss128k MyProgram

Configuring thread pool size:

The thread pool size can be set programmatically using the java.util.concurrent package.

Executor executor = Executors.newFixedThreadPool(10);

Configuring thread priority:

The priority of a thread can be set programmatically using the setPriority method of the Thread class.

Thread myThread = new Thread();myThread.setPriority(Thread.MIN_PRIORITY);

Monitoring the Garbage Collection

Compiler Optimization Level

The optimization level of the compiler refers to the extent to which the compiler optimizes the generated bytecode to improve the performance of the program.

--

--

Manish Goyal
Manish Goyal

Responses (1)