GC Algorithm

Parallel GC

Applied as the default GC in Java 8

  • Performs minor collection in parallel

    • Can significantly reduce GC overhead

  • A GC designed for applications that handle medium to large-scale datasets running on multi-processor or multi-thread hardware

  • Parallel Compaction

    • A feature that allows the Parallel Collector to perform major collection in parallel

    • When the -XX:+UseParallelGC option is specified, Parallel Compaction is used by default

  • However, the use of multi-threaded collection is limited to the Young generation only

    • Young Generation Collection algorithm: Parallel Scavenge

    • Old Generation Collection algorithm: Serial Mark-Sweep-Compact

G1 (Garbage First Collector)

Applied as the default GC in Java 11

  • A Collector designed for multi-processor machines with large memory

  • The G1 Collector can be enabled with the -XX:+UseG1GC option

  • Note that G1 GC is the only one that is not a Generational GC

    • The G1 collector is a unique collector that does not divide the heap into Young and Old regions

    • G1 eliminates the physical generation distinction and treats the entire heap as 1MB-sized regions

      • It is organized in a grid pattern and uses approximately 2000 regions

    • The name G1 means that collection starts from the region most filled with garbage

      • When a region full of garbage is found, the collector runs immediately

  • Live objects in Old regions are moved to other Old regions, and compaction occurs

  • In G1, the concepts of Young and Old generations are not fixed

    • The set of regions where objects are newly allocated is the Young generation

    • The set of regions where promotion occurs is the Old generation

ZGC

Applied as the default GC in Java 17

ZGC is a scalable low-latency GC that can handle heaps ranging from 8MB to 16TB in size, and can be enabled using the -XX:+UseZGC option

  • Low-latency

    • ZGC increases responsiveness by minimizing pauses for memory collection

    • It is a concurrent GC where application threads continue to run during collection operations, and pause times are very short

      • This allows maintaining high responsiveness even in large-scale memory environments

      • Maximum latency is less than 1 millisecond

  • Very Large Heap Support

    • ZGC can handle heaps as large as 16TB

      • This makes it suitable for applications that perform large-scale data processing or memory-intensive tasks

  • Non-contiguous Collection

    • Instead of collecting the entire heap at once, ZGC divides it into small region units and performs garbage collection

    • By processing only portions of the collection work, it can distribute pause times

  • Parallel Processing

    • ZGC utilizes multi-threads to process GC operations in parallel

    • This efficiently distributes GC operations and reduces overall collection time

  • Efficiency

    • It is efficient because there is no need to clean up the heap during collection

      • Typical GCs trigger stop-the-world events to perform memory collection operations

        • During this time, all application threads are paused for GC operations

        • These pause times can affect application responsiveness and performance

      • In contrast, ZGC maintains very short pause times during the heap cleanup process

    • ZGC continues to run application threads during collection operations and only triggers very short pauses when necessary

      • ZGC focuses on increasing application responsiveness by minimizing pause times

Last updated