RFR: 8159464: DumpHeap.java hits assert in G1 code

Erik Helin erik.helin at oracle.com
Mon Jul 18 13:59:43 UTC 2016

Hi all,

this patch fixes an issue with the young gen sizing code in G1. The
problem is that the G1 policy uses a binary search to come up with the
young gen size, and the context for this binary search might change
while it is running. For this particular bug, a concurrent mark cycle
ended while the binary search was running. To fix this, we must save a
copy of all the state needed for the search.

I've looked through the code and as far as I can see the only data that
might change is the collector state (and the during_cm() state in
particular). The fix is to save the value of
collector_state()->during_cm() before the binary search. The data in
G1Analytics is not updated while the young gen sizing code is


I split the patch into two steps to make it a bit easier to review:
1. Add const to a lot of variables to ensure that they don't change:
2. Move G1DefaultPolicy::predic_will_fit into its own class,
   G1YoungLenghtPredictor. The G1YoungLengthPredictor class takes the
   needed parameters in its constructor:



More information about the hotspot-gc-dev mailing list