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)

Class loading

When a class is accessed for the first time (for example, when an object of the class is created), the class loader locates the class file and allocates its metadata in the Metaspace. The class loader owns this allocated Metaspace and the class loader instance itself is loaded onto the heap. Once loaded, subsequent references reuse the metadata of that same class.

There are two class loaders worth mentioning at this point: the bootstrap class loader (which is responsible for loading the class loaders themselves) and the application class loader. Both of these class loaders’ metadata reside permanently in Metaspace and consequently, are never garbage collected. Dynamic class loaders (and the classes they load) are, on the other hand, eligible for garbage collection.

This leads us to the release of memory from the Metaspace.