Request for Review (s) - 8149343: assert(rp->num_q() == no_of_gc_workers) failed: sanity

Jon Masamitsu jon.masamitsu at
Thu Mar 10 19:53:26 UTC 2016

The error here was that the number of active workers was
not always set correctly for parallel Reference processing.
The first fix was to set the number of active workers in the
ReferenceProcessor in the task constructor.  Once thatDiff
was fixed a subsequent assertion failure occurred.

#  Internal Error 
pid=18444, tid=18500
#  assert(id < _max_num_q) failed: Id is out-of-bounds id 23 and max id 23)

This was fixed by the change

-    if (++_next_id == _num_q) {
+    assert(!_discovery_is_mt, "Round robin should only be used in 
serial discovery");
+    if (++_next_id >= _num_q) {

See the CR for an example log which showed _num_q changing
values between different phases of a collection and where the
value of _next_id was greater than _num_q.

The last change was to add a parameter to the logging function so that
the logging only output the active lists (which made the reading of the
logs simpler)

-  void log_reflist_counts(DiscoveredList ref_lists[], size_t 
total_count) PRODUCT_RETURN;
+  void log_reflist_counts(DiscoveredList ref_lists[], uint 
active_length, size_t total_count) PRODUCT_RETURN;

This patch fixes UseG1GC for the failure where
UseDynamicNumberOfGCThreads and ParallelRefProcEnabled
are both turned on.  There is still a failure with UseParallelGC
that is being fixed under 8150994.

Testing: gc_test_suite with UseDynamicNumberOfGCThreads on and
ParallelRefProcEnabled on and off.   rbt in progress


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the hotspot-gc-dev mailing list