RFR: Implement arraycopy post-processing in GC threads for Traversal GC

Aleksey Shipilev shade at redhat.com
Tue Jun 19 08:20:51 UTC 2018


On 06/19/2018 10:05 AM, Roman Kennke wrote:
> http://cr.openjdk.java.net/~rkennke/traversal-arraycopy/webrev.01/

*) In the SBS methods where you add the push_arraycopy block, there is already
_heap->is_concurrent_traversal_in_progress() branch that you can reuse. It also has oop(mr.start())
handy already. After this move, non-traversal GC would not be penalized.

*) I'd add new lines around this block, because it is semantically distinct from everything else:

 611     }
         // here
 612     if (_arraycopy_task_queue.length() > 0) {
 613       process_arraycopy_task(cl);
 614     }
         // and here
 615     uint work = 0;

*) This check could be turned into pre-condition before pushing on the arraycopy queue?

1172 bool ShenandoahTraversalGC::process_arraycopy_task(T* cl) {
1174   if (task.start() == NULL) {
1175     return false;
1176   }

I assume you have run performance tests with it to justify its usefulness? :)

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list