String-dedup test failures

Zhengyu Gu zgu at redhat.com
Thu Nov 16 13:23:21 UTC 2017


On 11/16/2017 04:25 AM, Roman Kennke wrote:
> I think we need to clean up the string dedup table *after marking*. If a 
> byte[] is not reachable after marking, we need to clean all references 
> to it, because *it may become trashed* during evac. If we want to keep 
> it alive, then we need to mark it. Evac'ing an unmarked byte[] after 
> marking is calling for troubles, because we probably access a pointer 
> that is about to be invalidated.
We do keep the references alive with keep_alive_barrier()/SATB.enqueue()
(http://hg.openjdk.java.net/shenandoah/jdk10/file/c24f64323317/src/hotspot/share/gc/g1/g1StringDedupTable.cpp#l383)

The problem I saw is that, String dedup table still contains *dead* 
objects from previous cycle, that's why it hits assertion during 
concurrent marking. However, this *should* be handled in mark_roots()
(http://hg.openjdk.java.net/shenandoah/jdk10/file/c24f64323317/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp#l280)

This supposes to clean up dead references from previous cycle and update 
references after evacuation.

Do I miss anything?

Thanks,

-Zhengyu






> 
> Roman
> 


More information about the shenandoah-dev mailing list