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)

Profiling Java applications

Profiling is used to make an analysis of the runtime performance of an application. This is something that needs to be done carefully, since it usually has an impact on the application that is being profiled. It is, therefore, advisable to profile the development environment if possible. We are going to have a look at profiling with the jstat and jmap command-line tools, and the VisualVM application. The first two come with your Java Development Kit (JDK); the latter used to come with it but now it can be downloaded separately.

Important note

You can download VisualVM here:

There are other profiles out there; some IDEs even have their own profilers built in, which work in a similar way.

Profiling with jstat and jmap

With the two command-line utilities, jstat and jmap, we can analyze and profile memory. We are going to explore how to do that.

Let’s say we have a simple Java application: