Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8229492

JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination

XMLWordPrintable

    • Thomas Schatzl
    • Feature
    • Open
    • gc
    • Implementation
    • hotspot dash gc dash dev at openjdk dot java dot net
    • XS
    • XS
    • 366

      Summary

      Deprecate the combination of the Parallel Scavenge and Serial Old garbage collection algorithms.

      Non-Goals

      • It is not a goal to remove this GC combination.

      • It is not a goal to deprecate any other GC combinations.

      Motivation

      There is one combination of GC algorithms that we believe is very little used but requires a significant amount of maintenance effort: The pairing of the parallel young generation GC (called ParallelScavenge) and the serial old GC (called SerialOld). This combination must be specifically enabled by the user with the -XX:+UseParallelGC -XX:-UseParallelOldGC command line options.

      This combination is unusual since it pairs the parallel young generation and serial old generation GC algorithms. We think this combination is only useful for deployments with a very large young generation and a very small old generation. In this scenario the full collection pause times might be bearable due to the small size of the old generation. In practice this is a very rare and risky deployment, since a slight shift in liveness for objects in the young generation will result in an OutOfMemoryException, since the old generation is significantly smaller than the young generation. The only advantage of this combination compared to using a parallel GC algorithm for both the young and old generations is slightly lower total memory usage. We believe that this small memory footprint advantage (at most ~3% of the Java heap size) is not enough to outweigh the costs of maintaining this GC combination.

      Description

      In addition to deprecating the option combination -XX:+UseParallelGC -XX:-UseParallelOldGC we will also deprecate the option -XX:UseParallelOldGC, since its only use is to deselect the parallel old generation GC, thereby enabling the serial old generation GC.

      As a result, any explicit use of the UseParallelOldGC option will display a deprecation warning. A warning will, in particular, be displayed when -XX:+UseParallelOldGC is used standalone (without -XX:+UseParallelGC) to select the parallel young and old generation GC algorithms.

      The only way to select the parallel young and old generation GC algorithms without a deprecation warning will to specify only -XX:+UseParallelGC on the command line.

      Alternatives

      The only change is the deprecation message; there is no loss of functionality. The existing collector called "Parallel", which combines the parallel young generation and parallel old generation algorithms, has almost the same behavior and should be a drop-in replacement.

      Risks and Assumptions

      We assume that there are very few users of this GC combination. If there are still a significant number of users of this combination, deprecation may be reconsidered.

            tschatzl Thomas Schatzl
            tschatzl Thomas Schatzl
            Thomas Schatzl Thomas Schatzl
            Erik Helin, Kim Barrett, Mikael Vidstedt, Stefan Karlsson
            Mikael Vidstedt
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: