RFR: Shenandoah string deduplication

Roman Kennke rkennke at redhat.com
Thu Dec 7 16:16:31 UTC 2017


This is excellent. Still ok with me.

Roman

> A minor update: removed creation of unused StringDedupTable_lock:
> 
> --- old/src/hotspot/share/runtime/mutexLocker.cpp    2017-12-07 
> 08:57:03.732839267 -0500
> +++ new/src/hotspot/share/runtime/mutexLocker.cpp    2017-12-07 
> 08:57:03.383839085 -0500
> @@ -202,9 +202,6 @@
>       def(SATB_Q_FL_lock             , PaddedMutex  , access,      true, 
>   Monitor::_safepoint_check_never);
>       def(SATB_Q_CBL_mon             , PaddedMonitor, access,      true, 
>   Monitor::_safepoint_check_never);
>       def(Shared_SATB_Q_lock         , PaddedMutex  , access + 1,  true, 
>   Monitor::_safepoint_check_never);
> -    // Shenandoah needs (special-1) rank of the lock, because write 
> barrier can evacuate objects while
> -    // thread holding other locks, such as CodeCache_lock, etc.
> -    def(StringDedupTable_lock      , PaddedMutex  , special-1,   true, 
> Monitor::_safepoint_check_never);
>     }
>     def(ParGCRareEvent_lock          , PaddedMutex  , leaf     ,   true, 
>   Monitor::_safepoint_check_sometimes);
>     def(DerivedPointerTableGC_lock   , PaddedMutex  , leaf,        true, 
>   Monitor::_safepoint_check_never);
> 
> 
> Webrev: http://cr.openjdk.java.net/~zgu/shenandoah/sh_strdedup/webrev.01/
> 
> Thanks,
> 
> -Zhengyu
> 
> 
> 
> On 12/06/2017 02:48 PM, Roman Kennke wrote:
>> Am 06.12.2017 um 18:15 schrieb Zhengyu Gu:
>>> The implementation takes different approach from G1's implementation.
>>>
>>> * It treats string dedup queue/table as weak roots.
>>>
>>> * It identifies deduplication candidates during concurrent marking 
>>> and during full gc, to reduce impact on pause time.
>>>
>>> * To properly identify the candidates, it manipulates string's age 
>>> field concurrently, to prevent from processing string too early or 
>>> deduplicating the same string over and over again. While it is 
>>> undesirable, it reduces the risk by only manipulating *regular* 
>>> strings - when they do not have displaced headers. Locked objects are 
>>> relative rare, especially for immutable objects, such as Strings.
>>>
>>> * Deduplicate routine is implemented lock-free, in case we have to 
>>> embed it in barriers.
>>>
>>> * Reverted all early changes to G1's implementation
>>>
>>> Webrev: 
>>> http://cr.openjdk.java.net/~zgu/shenandoah/sh_strdedup/webrev.00/
>>>
>>> Test:
>>>    hotspot_gc_shenandoah (fastdebug and release)
>>>    specJBB               (fastdebug and release)
>>>
>>>
>>> Thanks,
>>>
>>> -Zhengyu
>>
>> src/hotspot/share/classfile/stringTable.cpp:
>> /me makes a note that this warrants a GC interface
>>
>> Other than that, I like it! :-)
>>
>> Probably warrants another pair of eyes.
>>
>> Roman
>>



More information about the shenandoah-dev mailing list