RFR: Rewrite and fix ShenandoahHeap::marked_object_iterate

Zhengyu Gu zgu at redhat.com
Wed Oct 18 14:34:01 UTC 2017


547         if (cb < tams) {
548           cb = mark_bit_map->getNextMarkedWordAddress(cb, end);
549         }

I recall when I added additional test/branch with avoiding filler 
evacuation experiment, I saw noticeable performance regression.

By replacing line #548:

    cb = mark_bit_map->getNextMarkedWordAddress(cb, bitmap_limit + 
skip_bitmap_delta);

we can avoid cb < tams check.

-Zhengyu




On 10/18/2017 10:07 AM, Aleksey Shipilev wrote:
> http://cr.openjdk.java.net/~shade/shenandoah/markscan-tams-bug/webrev.02/
> 
> This is the follow-up for the bug that Zhengyu found:
>    http://mail.openjdk.java.net/pipermail/shenandoah-dev/2017-October/004049.html
> 
> Our attempts to fix it in current code makes the code even more messy, so it makes sense to rewrite
> that method completely, in a saner structure. It fixes the bug Zhengyu originally found by having
> the explicit past-TAMS scanning step that restarts at TAMS. This also covers the non-prefetched
> path, as Dominik suggested. The bitmap scan is rewritten to guarantee to touch below-TAMS objects only.
> 
> Please take a hard look at the code. I am thinking if it is possible to unit-test this thing...
> 
> Testing: hotspot_gc_shenandoah {fastdebug|release}
> 
> Thanks,
> -Aleksey
> 


More information about the shenandoah-dev mailing list