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