RFR: Partial should always be preceded by UR

Aleksey Shipilev shade at redhat.com
Fri Aug 4 12:43:53 UTC 2017


We actually had this invariant enforced earlier, when PartialHeuristics was telling that
update_refs() and should_start_update_refs() is "true" unconditionally. But after LRU/Generational
that brought the split to major and minor heuristics, nobody asks minor heuristics about this
anymore. In our current testing, this causes intermittent matrix verification failures before
partial GC.

Fix:

$ hg diff
diff -r 905879854473 src/share/vm/gc/shenandoah/shenandoahCollectorPolicy.cpp
--- a/src/share/vm/gc/shenandoah/shenandoahCollectorPolicy.cpp	Fri Aug 04 12:12:36 2017 +0200
+++ b/src/share/vm/gc/shenandoah/shenandoahCollectorPolicy.cpp	Fri Aug 04 14:43:23 2017 +0200
@@ -1370,10 +1370,16 @@
 }

 bool ShenandoahCollectorPolicy::update_refs() {
+  if (_minor_heuristics != NULL && _minor_heuristics->update_refs()) {
+    return true;
+  }
   return _heuristics->update_refs();
 }

 bool ShenandoahCollectorPolicy::should_start_update_refs() {
+  if (_minor_heuristics != NULL && _minor_heuristics->should_start_update_refs()) {
+    return true;
+  }
   return _heuristics->should_start_update_refs();
 }


Testing: hotspot_gc_shenandoah

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list