| CSR :   | |
| Relates :   | |
| Relates :   | 
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.")                                      \
| 
 |