RFR: Eliminate string dedup cleanup phase and correct UR closure

Zhengyu Gu zgu at redhat.com
Thu Oct 19 16:07:57 UTC 2017



On 10/19/2017 11:31 AM, Aleksey Shipilev wrote:
> 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?
Oops, pushed before seeing this.

I thought eliminating second bitmap still undecided, no?

or we can pre-evacuate it?

> 
> *) What does TestShenandoahStrDedup test now? That we do not crash, at least?
I guess, the stress probably accomplishes more.

Thanks,

-Zhengyu

> 
> Thanks,
> -Aleksey
> 


More information about the shenandoah-dev mailing list