The serial reference processing closures in concurrent marking operate directly upon the global marking stack. These closures should be cleaned up or improved:
* We should use instances on the parallel reference processing closures in the serial code. The worker id to use is 0.
* If we choose to keep the serial specific closures, they should be changed to observe the G1RefProcDrainInterval flag.
Since reference processing takes place in the remark pause - we would like to avoid marking stack overflows this late in the marking cycle.
Either solution will reduce the likelihood of seeing a stack overflow during reference processing.