Book Image

Java Memory Management

By : Maaike van Putten, Dr. Seán Kennedy
Book Image

Java Memory Management

By: Maaike van Putten, Dr. Seán Kennedy

Overview of this book

Understanding how Java organizes memory is important for every Java professional, but this particular topic is a common knowledge gap for many software professionals. Having in-depth knowledge of memory functioning and management is incredibly useful in writing and analyzing code, as well as debugging memory problems. In fact, it can be just the knowledge you need to level up your skills and career. In this book, you’ll start by working through the basics of Java memory. After that, you’ll dive into the different segments individually. You’ll explore the stack, the heap, and the Metaspace. Next, you’ll be ready to delve into JVM standard garbage collectors. The book will also show you how to tune, monitor and profile JVM memory management. Later chapters will guide you on how to avoid and spot memory leaks. By the end of this book, you’ll have understood how Java manages memory and how to customize it for the benefit of your applications.
Table of Contents (10 chapters)

Tuning the configurations of the JVM

The settings of JVM can be adjusted. The process of adjusting the settings of JVM is called tuning. The idea of these adjustments is to boost the performance of the JVM. Once again, tuning should not be the first step in improving performance. Good code should always come first.

We are going to have a look at the settings that are related to memory management: the heap size, Metaspace, and the garbage collector.

Tuning the heap size and thread stack size

The heap size can be changed. It is generally best practice to not set the heap size to more than half of what is available on the server. This could lead to performance issues, as the server will be having other processes running as well.

The default size depends on the system. This command will show the defaults on a Windows system:

java -XX:+PrintFlagsFinal -version | findstr HeapSize

This command shows the default output for a macOS system:

java -XX:+PrintFlagsFinal -version...