RFR: 8058568: GC cleanup phase can cause G1 skipping a System.gc()

Stefan Johansson stefan.johansson at oracle.com
Mon Oct 20 11:08:41 UTC 2014


Hi,

Please review this fix for:
https://bugs.openjdk.java.net/browse/JDK-8058568

Webrev:
http://cr.openjdk.java.net/~sjohanss/8058568/hotspot.00/

Summary:
For G1, full GCs might be skipped if a young GC is executed after the 
full GC is initiate but before it has been started. The cause for this 
is that G1 Full GCs aren't marked as full collections when creating the 
VM_GC_Operation. Changing this to actually mark it as a full collection 
will cause it to do a second check in skip_operation() to make sure it 
really should skip it. This check checks if the number of full 
collections has changed since the operation was scheduled, and if not 
continues.

There was a second problem with this as well, the full gc before count 
we passed in to the GC operation was not the correct one, we previously 
passed in _old_marking_cycles_started which is not the same as number of 
full collections. Changing this to instead pass in the 
total_full_collections() will make the above check work as expected.

Testing:
* Verified that a JTREG test that previously failed now passes
* Adhoc aurora run didn't show any regression

Stefan


More information about the hotspot-gc-dev mailing list