What Is Concurrent Mark-Sweep (CMS) Collector
This section describes the Concurrent Mark-Sweep (CMS) Collector, which attempts to reduce application pause times of Major GC by using separate garbage collector threads to trace the reachable objects concurrently with the execution of the application threads.
What Is Concurrent Mark-Sweep (CMS) Collector?
Concurrent Mark-Sweep (CMS) Collector is actually a combination of two garbage collectors:
- The Parallel New (ParNew) Collector of Young generation -
It uses the 3-area (Eden, Survivor Space "From" and Survivor Space "To") algorithm
parallelly with multiple threads in a stop-the-world fashion.
It also has an internal 'callback' that allows an old generation
collector to operate on the objects it collects
- The Concurrent Mark Sweep (CMS) Collector of Tenured generation -
It uses the "Mark-Sweep-Compact" algorithm
with multiple threads concurrently with the application.
A small portion is still running in a stop-the-world fashion.
The CMS Collector can be invoked using the "-XX:+UseConcMarkSweepGC" JVM option.
During each Major GC cycle, the CMS collector pauses all the application threads for a brief
period at the beginning of the collection and again toward the middle of the collection.
The second pause tends to be the longer of the two pauses. Multiple threads are used to do
the collection work during both pauses. The remainder of the collection (including most of
the tracing of live objects and sweeping of unreachable objects is done with one or more garbage
collector threads that run concurrently with the application.
Typically applications that have a relatively large set of long-lived data (a large
tenured generation) and run on machines with two or more processors tend to benefit from
the use of this collector.
The CMS collector is also called Low-Latency Collector,
because it reduces the application pause time. But it may slowdown the application,
because the GC is running concurrently with the application.
It's a good choice for interactive applications like Websites.
Table of Contents
About This Book
Heap Memory Area and Size Control
JVM Garbage Collection Logging
Introduction of Garbage Collectors
Serial Collector - "+XX:+UseSerialGC"
Parallel Collector - "+XX:+UseParallelGC"
►Concurrent Mark-Sweep (CMS) Collector - "+XX:+UseConcMarkSweepGC"
►What Is Concurrent Mark-Sweep (CMS) Collector
Concurrent Mark-Sweep Collector GC Log Message Format
Reduce Stop-The-World with Concurrent Mark and Sweep
Parallel New (ParNew) Collector for Minor GC
ParNew Collector - Tenuring Age Distribution
Maximium Logging of All Phases on Young GC
"-XX:ParallelGCThreads=6" - Young GC Parallel Threads
"-XX:MaxTenuringThreshold=0" - Tenuring Objects Immediately
"-XX:CMSInitiatingOccupancyFraction=20" - Initiate CMS
Maximium Logging of All Phases on Old GC
Maximium Logging of All Phases on Full GC
"-XX:ParallelGCThreads=6" - Old GC Parallel Threads
"-XX:ConcGCThreads=3" - Old GC Concurrent Threads
Garbage First (G1) Collector - "+XX:+UseG1GC"
The Z Garbage Collector (ZGC) - "+XX:+UseZGC"
Object References and Garbage Collection
Garbage Collection Performance Test Program
Performance Tests on Serial Collector
Performance Tests on Parallel collector
Performance Tests on Concurrent collector
Performance Tests on G1 collector
Garbage Collection Performance Test Summary
Full Version in PDF/EPUB