RFR(M) 8203641: Refactor String Deduplication into shared

Roman Kennke rkennke at redhat.com
Fri Jun 1 19:58:06 UTC 2018


Am 28.05.2018 um 23:11 schrieb Zhengyu Gu:
> Hi,
> 
> Please review this refactoring of G1 string deduplication into shared
> directory, so that other GCs (such as Shenandoah) can advantage of
> existing infrastructure and plugin their own implementation.
> 
> This refactoring preserves G1's String Deduplication infrastructure
> (please see the comments in stringDedup.hpp for details), so that there
> is no change to G1 outside of string deduplication code.
> 
> Following changes are made to support different GCs:
> 
> 1. Allows plugin new dedup queue implementation.
>    While it keeps G1's dedup queue static interface, queue itself now is
> a pure virtual class. Different GC can provide different implementation
> to fit its own enqueuing mechanism.
>    For example, G1 enqueues deduplication candidates during STW
> evacuate/mark pause, while Shenandoah implementation does it during
> concurrent mark.
> 
> 2. Abstracted out generation related statistics out of StringDedupStat
> base class, cause not all GCs are generational.
>    G1StringDedupStat simply extends the base to add generational
> statistics.
> 
> 3. Moved table and queue's parallel processing logic from closure
> (StringDedupUnlinkOrOopsDoClosure) to corresponding table and queue.
> This gives flexibility to construct closure to share among the workers
> (as G1 does), as well as private closure for each worker (as Shenandoah
> does).
> 
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8203641
> Webrev: http://cr.openjdk.java.net/~zgu/8203641/webrev.00/index.html
> 
> Test:
> 
>   Submit test came back clean.
> 

This change looks good to me. Thank you! Should wait a bit for G1
engineers to comment too.

Roman




More information about the hotspot-dev mailing list