JDK-8212658 : CSR for Promptly Return Unused Committed Memory from G1
  • Type: CSR
  • Component: hotspot
  • Sub-Component: gc
  • Priority: P4
  • Status: Closed
  • Resolution: Approved
  • Fix Versions: 12
  • Submitted: 2018-10-18
  • Updated: 2018-12-20
  • Resolved: 2018-11-29
Related Reports
CSR :  
Relates :  
Relates :  
Description
Summary
-------

Introduce controls for a periodic garbage collection and optional system idle detection to allow giving back of unused memory for the G1 garbage collector for JEP JDK-8204089 Promptly Return Unused Committed Memory from G1.

Problem
-------

At the moment G1 will never automatically gives back Java heap memory to the operating system if the application is inactive.

Solution
--------

This CSR introduces control options for periodic concurrent garbage collections. I.e. when and how these periodic garbage collections to reclaim memory should occur.

This includes the option `G1PeriodicGCInterval` to determine the polling interval, `G1PeriodicGCSystemLoadThreshold` to optionally take system load into account, and `G1PeriodicGCInvokesConcurrent` to determine the type of garbage collection to occur.

This set of options has been found appropriate for this change after discussion on the hotspot-gc-dev mailing list, most recently in the thread at http://mail.openjdk.java.net/pipermail/hotspot-gc-dev/2018-September/023197.html.

Alternatives are discussed in the associated JEP-JDK-8204089: Promptly Return Unused Committed Memory from G1. More, earlier discussion links are available in the comments section of that issue.

Specification
-------------

      manageable(uintx, G1PeriodicGCInterval, 0,                                \
              "Number of milliseconds after a previous GC to wait before "      \
              "triggering a periodic gc. A value of zero disables periodically "\
              "enforced gc cycles.")                                            \
              range(0, max_jlong)                                               \
                                                                                \
      product(bool, G1PeriodicGCInvokesConcurrent, true,                        \
              "Determines the kind of periodic GC. Set to true to have G1 "     \
              "perform a concurrent GC as periodic GC, otherwise use a STW "    \
              "Full GC.")                                                       \
                                                                                \
      manageable(uintx, G1PeriodicGCSystemLoadThreshold, 0,                     \
              "Maximum recent system wide system load as returned by the 1m "   \
              "value of getloadavg() at which G1 triggers a periodic GC. A "    \
              "load above this value cancels a given periodic GC. A value of "  \
              "zero disables this check.")                                      \
Comments
Moving to Approved.
29-11-2018