JDK-8151176 : Current default settings for static IHOP may result in concurrent marking never occurring
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 9
  • Priority: P4
  • Status: Closed
  • Resolution: Not an Issue
  • Submitted: 2016-03-03
  • Updated: 2019-07-03
  • Resolved: 2019-07-03
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Related Reports
Relates :  
If static IHOP is selected, it may happen that concurrent marking will never be started.

The reason is that static IHOP starts if old gen occupancy exceeds a fixed percentage of the current heap capacity. If either the user or ergonomics decide that the old gen can not be larger than that fraction of the heap capacity that triggers concurrent mark, marking will never start.

E.g. current defaults allow a young gen size up to 60% of the heap capacity (G1MaxNewSizePercent). which means that only 40% can be occupied by old gen.

However, the default value of 45 for InitiatingHeapOccupancyPercent means that marking will only trigger if the old gen occupies more than 45% of the heap, which will not occur.

This means G1 will run into full gcs (potentially) all the time.

This situation particularly occurs in high-throughput applications like SPECjbb* with default settings.

The best option would be to make the IHOP threshold not compared to current capacity, but capacity - minimum young gen size.
G1 uses a percentage of the old gen for a long time now.

The same issue applies when using InitiatingHeapOccupancyPercent as starting value for adaptive IHOP.

There are several workarounds possible, that's the reason for the (initially) low priority: - fix either the default value of InitiatingHeapOccupancyPercent, use adaptive IHOP (which is the default anyway), or fix G1NewSizePercent.