Common JVM Garbage Collectors: Characteristics, Use Cases, and Tuning Parameters
This article provides an overview of the most common Java JVM garbage collectors—including Serial, ParNew, Parallel, Serial Old, CMS, Parallel Old, and G1—detailing their characteristics, advantages, disadvantages, typical usage scenarios, and JVM tuning parameters for optimal performance.
Java garbage collection is a frequent interview topic and an essential knowledge area for developers. This article introduces the main JVM garbage collectors, their key features, appropriate scenarios, and tuning suggestions.
Young Generation Collectors
Serial
Serial is the oldest collector, using a single thread and a copying algorithm. It pauses all application threads during collection.
Target: Young generation
Algorithm: Copying
Threading: Single‑threaded
Pause: Stops all user threads
Advantages
Simple and efficient on single‑CPU systems because there is no thread‑switching overhead.
Disadvantages
Stops all application threads, which may be noticeable to users.
Usage Scenarios
Client‑side desktop applications with limited memory
Single‑core servers where maximum single‑thread throughput is desired
Parameter
-XX:+UseSerialGC: Explicitly enable the Serial collector
ParNew
ParNew is the multithreaded version of Serial, sharing the same algorithm but using multiple threads.
Advantages
Better utilization of multi‑core CPUs.
Disadvantages
Still pauses all application threads during collection.
Usage Scenarios
Used in Server mode; it is the only young‑generation collector that can work together with the CMS collector.
Parameters
-XX:+UseConcMarkSweepGC: When CMS is enabled, ParNew becomes the default young‑generation collector -XX:+UseParNewGC: Force the use of ParNew -XX:ParallelGCThreads: Set the number of GC threads (default equals the number of CPUs)
Parallel (Parallel Scavenge)
Parallel Scavenge is a multithreaded young‑generation collector that also uses the copying algorithm. Its goal is to achieve a controllable throughput rather than minimizing pause time.
Target: Young generation
Algorithm: Copying
Threading: Multithreaded
Focus: High throughput, predictable pause time
Advantages
High throughput, efficient CPU usage, suitable for workloads that can tolerate longer pauses.
Disadvantages
Higher throughput comes at the cost of longer pause times compared with pause‑time‑focused collectors.
Usage Scenarios
Ideal for applications running on multi‑CPU servers where pause time is not critical, such as batch processing, order handling, payroll, or scientific calculations.
Parameters
-XX:MaxGCPauseMillis: Target maximum pause time (ms) -XX:GCTimeRatio: Desired GC time as a percentage of total runtime (0‑99)
Old Generation Collectors
Serial Old
Serial Old is the old‑generation counterpart of Serial, using a single thread and the mark‑compact algorithm.
Target: Old generation
Algorithm: Mark‑compact (also called Mark‑Sweep‑Compact)
Threading: Single‑threaded
Usage Scenarios
Client mode
Single‑core servers
Paired with Parallel Scavenge
Fallback for CMS when concurrent mode fails
CMS (Concurrent Mark‑Sweep)
CMS aims to minimize pause times by performing most of its work concurrently. It uses the mark‑sweep algorithm.
Phases: Initial mark, concurrent marking, remark, concurrent sweep
Target: Old generation
Algorithm: Mark‑sweep (no compaction, may cause fragmentation)
Goal: Short pause times, high throughput
Drawback: Higher memory consumption and CPU sensitivity
Advantages
Short pause times
High throughput
Concurrent collection
Disadvantages
CPU‑intensive
Cannot collect floating garbage
May cause significant memory fragmentation
Usage Scenarios
Interactive applications that require low latency
Web/B/S server‑side services where response time is critical
Parameter
-XX:+UseConcMarkSweepGC: Enable CMS collector
Parallel Old
Parallel Old is the old‑generation version of Parallel Scavenge, using multiple threads and the mark‑compact algorithm.
Target: Old generation
Algorithm: Mark‑compact
Threading: Multithreaded
Usage Scenarios
JDK 1.6+ as a replacement for Serial Old
Server mode on multi‑CPU machines where throughput is prioritized
Parameter
-XX:+UseParallelOldGC: Enable Parallel Old collector
G1 (Garbage‑First)
Characteristics
Parallel and concurrent, fully utilizing multi‑CPU environments
Generational collection covering both young and old generations
Combines multiple algorithms to avoid fragmentation
Predictable pause times with configurable targets
Designed for server‑side workloads, intended to replace CMS
Advantages
Effective use of multi‑core hardware
Manages the entire heap without needing other collectors
No fragmentation, suitable for long‑running services
Provides a model for predictable pause times
Disadvantages
G1 requires a large remembered set (up to ~20% of heap) and incurs additional overhead, making it less efficient for small‑memory applications compared with CMS.
Usage Scenarios
Recommended for most modern server applications; for non‑performance‑critical cases, G1 can be used as the default collector.
Parameters
-XX:+UseG1GC: Enable G1 collector -XX:InitiatingHeapOccupancyPercent: Start concurrent marking when heap usage reaches this percent (default 45) -XX:MaxGCPauseMillis: Target maximum pause time (default 200 ms) -XX:G1HeapRegionSize: Size of each region (1 MB‑32 MB, aiming for ~2048 regions at minimum heap)
Understanding these collectors and their tuning options equips developers to handle interview questions and to optimise Java applications for years to come.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Selected Java Interview Questions
A professional Java tech channel sharing common knowledge to help developers fill gaps. Follow us!
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
