Chapter 6. Java’s Approach to Memory and Concurrency

This chapter is an introduction to the handling of concurrency (multithreading) and memory in the Java platform. These topics are inherently intertwined, so it makes sense to treat them together. We will cover:

  • Introduction to Java’s memory management

  • The basic mark-and-sweep garbage collection (GC) algorithm

  • How the HotSpot JVM optimizes GC according to the lifetime of the object

  • Java’s concurrency primitives

  • Data visibility and mutability

Basic Concepts of Java Memory Management

In Java, the memory occupied by an object is automatically reclaimed when the object is no longer needed. This is done through a process known as garbage collection (or GC). Garbage collection is a technique that has been around for years and was pioneered by languages such as Lisp. It takes some getting used to for those programmers accustomed to languages such as C and C++, in which you must call the free() function or the delete operator to reclaim memory.

Note

The fact that you don’t need to remember to destroy every object you create is one of the features that makes Java a pleasant language to work with. It is also one of the features that makes programs written in Java less prone to bugs than those written in languages that don’t support automatic garbage collection.

Different VM implementations handle garbage collection in different ways, and the specifications do not impose very stringent restrictions on how GC must be implemented. ...

Get Java in a Nutshell, 8th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.