[15] RFR 8236880: Shenandoah: Move string dedup cleanup into concurrent phase
Roman Kennke
rkennke at redhat.com
Wed Jan 22 14:33:17 UTC 2020
Hi Zhengyu,
Would it be possible to use scoped lockers instead in:
src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp
The rest looks ok to me.
Thanks,
Roman
> Please review this patch that moves string deduplication cleanup task
> into concurrent phase.
>
> The cleanup task composites two subtasks: StringDedupTable and
> StringDedupQueue cleanup.
>
> Concurrent StringDedupTable cleanup is very straightforward. GC takes
> StringDedupTable_lock to block out mutators from modifying the table,
> then performs multi-thread cleanup, just as it does at STW pause.
>
> Concurrent StringDedupQueue cleanup is more complicated. GC takes
> StringDedupQueue_lock, only blocks queue structure changes, while
> mutators can still enqueue new string candidates and dedup thread can
> still perform deduplication. So there are a couple of synchronizations
> need to be established.
>
> 1) When mutator enqueues a candidate, the enqueued oop should be valid
> before the slot can be made visible to GC threads.
>
> 2) When GC thread updates oop, it needs to make sure that dedup thread
> does not see partially updated oop.
>
> The implementation uses load_acquire/release_store pair to ensure above
> synchronization held.
>
> GC threads may miss some just enqueued oops by mutators. This is not a
> concern, since LRB guarantees they are in to-space.
>
>
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8236880
> Webrev: http://cr.openjdk.java.net/~zgu/JDK-8236880/webrev.00/
>
>
> Test:
> hotspot_gc_shenandoah with -XX:+UseStringDeduplication
> (fastdebug and release) on x86_64 and aarch64 Linux
>
> Thanks,
>
> -Zhengyu
>
More information about the hotspot-gc-dev
mailing list