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 automatic memory management). Garbage collection is a technique that has been around for years in languages such as Lisp. It takes some getting used to for programmers accustomed to languages such as C and C++, in which you must call the
free() function or the
delete operator to reclaim memory.
NoteThe 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. ...