RFR: 8246718: ParallelGC should not check for forward objects for copy task queue

Kim Barrett kim.barrett at oracle.com
Sun Jun 7 05:08:17 UTC 2020


Please review this change to the handling of copy tasks by ParallelGC.
Formerly, before adding a task entry to the queue it would check
whether the referenced object was already forwarded.  If so, it would
handle the reference immediately, inline, rather than pushing the task
onto the queue.

Measurements show that a no-worse and sometimes better (depending on
the hardware configuration) approach for most applications is to not
do the forwarding check, but to instead prefetch the start of the
referenced object and then always push the task.

The corresponding G1 code does a for-write prefetch on the mark word
of the object, and a for-read prefetch past the object header.
Measurements with ParallelGC found the for-read prefetch not very
productive, and possibly even slightly counter-productive, so this
change only does the for-write prefetch on the mark word.

CR:
https://bugs.openjdk.java.net/browse/JDK-8246718

Webrev:
https://cr.openjdk.java.net/~kbarrett/8246718/

Testing:
mach5 tier1-5
various performance tests



More information about the hotspot-gc-dev mailing list