RFR(M): Shenandoah string dedup support

Zhengyu Gu zgu at redhat.com
Tue Aug 22 18:01:36 UTC 2017


Discussed with Roman during team meeting, I tried to minimize the 
changes to shared/g1 code base, as we are not clear how GC interface 
work will impact this area.

Shenandoah implementation is more complicated than I thought. G1 
implementation is not quite suitable for Shenandoah overall. It built 
upon that fact that G1 evacuates objects during safepoints, so 
StringDedupQueue is implemented the way that enqueuing (inside 
safepoints) and dequeuing (outside safepoints) do not overlap.

Shenandoah implementation uses age bits to track threshold for 
deduplication as G1 does. It benefits from concurrent evacuation during 
normal concurrent GC, that it can bypass queuing and deduplicate strings 
while evacuating them.

We use G1's implementation for full GC, where we only queue the 
candidates during safepoints, and process them outside of safepoints.


Webrev: http://cr.openjdk.java.net/~zgu/shenandoah/strdedup/webrev.00/

Test:

hotspot_gc_shenandoah + new test : fastdebug and release

XmlTransform: fastdebug and release with heuristics : aggressive, 
passive, generational, LRU

Thanks,

-Zhengyu





More information about the shenandoah-dev mailing list