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)

Exploring the different generations on the heap

The heap space consists of two different memory areas:

  • Young generation space
  • Old generation (tenured) space.

While we will not dive into the GC process in this chapter, we need to explain what a live object is. A live object is one that is reachable from the GC roots.

Garbage collection roots

A GC root is a special type of live object and is, therefore, not eligible for GC. All objects reachable from GC roots are also live and are, therefore, not eligible for GC. The GC roots act as starting points in GC, that is, start at these roots and mark all objects reachable as live. The most common GC roots are the following:

  • Local variables on the stack
  • All active Java threads
  • Static variables (as these can be referenced by their classes)
  • Java Native Interface (JNI) references – Objects created by the native code as part of a JNI call. This is a very special case of GC roots because the JVM...