RFR: Eliminate string dedup cleanup phase and correct UR closure
Aleksey Shipilev
shade at redhat.com
Thu Oct 19 15:31:17 UTC 2017
On 10/19/2017 03:45 PM, Zhengyu Gu wrote:
> This patch addresses two issues:
>
> 1) We don't need cleanup phase. It was intended to cleanup dead objects in string dedup table, so
> that we won't deduplicate to those *dead* char arrays.
>
> However, deduplication applies keep_alive_barrier() to revive those objects, that makes this phase
> unnecessary.
>
> 2) Applied wrong UR closure.
> We need to update references for all marked objects in completed bitmap, but
> ShenandoahUpdateRefsClosure only updates references in current cset.
>
> Webrev: http://cr.openjdk.java.net/~zgu/shenandoah/strdedup_cleanup/webrev.00/
*) It looks like using ShenandoahIsAliveCompleteClosure that polls the complete bitmap during init
mark call parallel_update_or_unlink() blows Roman's single bitmap rework. At init mark, the next
bitmap is already cleared, and we cannot use it. This is not necessarily your problem, but maybe
there is a more neutral solution to avoid referencing complete bitmap this early? For example,
piggybacking String dedup work on actual mark, so we visit alive objects only?
*) What does TestShenandoahStrDedup test now? That we do not crash, at least?
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list