RFR(L): 8029075 - String deduplication in G1

Bengt Rutisson bengt.rutisson at oracle.com
Tue Mar 11 11:04:28 UTC 2014


Hi Per,

On 2014-03-07 15:13, Per Liden wrote:
> Hi,
>
> Here's an updated webrev based on the feedback from Bengt and Thomas.
>
> http://cr.openjdk.java.net/~pliden/8029075/webrev.1/
>
> Diffs against previous webrev available here:
> http://cr.openjdk.java.net/~pliden/8029075/webrev.1-bengt_review_fixes/
> http://cr.openjdk.java.net/~pliden/8029075/webrev.1-thomas_review_fixes/

Thanks for providing these diffs. Made it easy to review.

Looks good to me.

>
> And as suggested, two changes in the initial webrev were broken out 
> into separate CRs, available here:

Great! Thanks for splitting these out.

>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8036672
> Webrev: http://cr.openjdk.java.net/~pliden/8036672/webrev.0/

Looks good.

>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8036673
> Webrev: http://cr.openjdk.java.net/~pliden/8036673/webrev.0/

Looks good.

Bengt


>
> /Per
>
> On 03/05/2014 11:00 AM, Bengt Rutisson wrote:
>>
>> Hi Per and everyone else,
>>
>> Overall this looks good to me. Me and Per went through this patch
>> together and here are the notes from this code walk through.
>>
>> There are two small bug fixes included in the change. It would be good
>> to separate these out to separate changes. We can review them together
>> with the main change, but having them as separate changesets will make
>> it easier to backport them if necessary.
>>
>>
>> stringDedup.hpp
>> The comments are not that helpful to me. I would suggest to either
>> remove them or make more descriptive.
>>
>> UseG1GC && UseStringDeduplication
>> Only allow UseStringDeduplication to be true if UseG1GC is true instead
>> of checking both?
>>
>> G1CollectedHeap::tear_down_region_sets() and
>> G1CollectedHeap::rebuild_region_sets()
>> Please add an RFE to clean these up as the naming and implementations
>> don't match anymore.
>>
>> StringDedupTable::trim()
>> rename to trim_cache?
>>
>> stringDedup.cpp
>> Two occurrences of:
>>    assert(UseG1GC, "String deduplication not available with G1");
>> The "not" should be a "only".
>>
>> Dummy statistics from interned stings is ignored. Please add an RFE to
>> try to include this statistics and possibly reduce the "known" count.
>>
>>
>> Add comments explaining why resize and rehash is not allowed for these
>> code paths:
>>
>> void StringDedup::unlink(BoolObjectClosure* is_alive) {
>>    unlink_or_oops_do(is_alive, NULL, false /* allow_resize_and_rehash 
>> */);
>> }
>>
>> void StringDedup::oops_do(OopClosure* keep_alive) {
>>    unlink_or_oops_do(NULL, keep_alive, false /* allow_resize_and_rehash
>> */);
>> }
>>
>> TestStringDeduplicationTools.java
>> verifyStrings  put the sleep at the end to possibly speed up the test a
>> little.
>>
>> InternedTest
>> Comments to explain what it does.
>>
>> testYoungGC - check that no full GCs happen
>> testFullGC - check that no young GCs happen
>>
>> testMemoryUsage - add "memoryUsageWithDedup >
>> memoryUsageWithDedupExpected" to the exception message
>>
>>
>> Thanks,
>> Bengt
>>
>>
>> On 3/3/14 2:33 PM, Per Liden wrote:
>>> Hi,
>>>
>>> Could I please have this patch reviewed.
>>>
>>>
>>> Summary
>>> -------
>>> This patch implements JEP 192 - String deduplication in G1. The goal
>>> of string deduplication is to reduce the Java heap live-data set by
>>> enhancing the G1 garbage collector so that duplicate instances of
>>> String are automatically and continuously deduplicated.
>>>
>>> I'd like to refer to the JEP for a more detailed description of this
>>> feature, the motivation for it, the expected benefit, how it's
>>> implemented, etc.
>>>
>>> This patch is mainly G1-related, but also touches a few runtime files.
>>>
>>> Webrev: http://cr.openjdk.java.net/~pliden/8029075/webrev.0/
>>>
>>> JEP: http://openjdk.java.net/jeps/192
>>>
>>> RFE: https://bugs.openjdk.java.net/browse/JDK-8029075
>>>
>>>
>>> Testing
>>> -------
>>> * JTreg - The patch includes the following 8 new tests:
>>>   - TestStringDeduplicationYoungGC.java: Tests deduplication during
>>> Young GC.
>>>   - TestStringDeduplicationFullGC.java: Tests deduplication during
>>> Full GC.
>>>   - TestStringDeduplicationAgeThreshold.java: Tests both valid and
>>> invalid age threshold settings.
>>>   - TestStringDeduplicationInterned.java: Tests that interned strings
>>> are deduplication before being interned.
>>>   - TestStringDeduplicationTableRehash.java: Stresses the hashtables
>>> ability to rehash all entries.
>>>   - TestStringDeduplicationTableResize.java: Stresses the hashtables
>>> ability to resize itself.
>>>   - TestStringDeduplicationMemoryUsage.java: Tests heap reduction when
>>> string deduplication is enabled.
>>>   - TestStringDeduplicationPrintOptions.java: Tests command line 
>>> options.
>>>
>>> * Stress testing:
>>>   - Kitchensink
>>>   - GCBasher
>>>
>>> * Regression testing:
>>>   - JCK
>>>   - vmTestbase
>>>   - Bigapps
>>>
>>> * Large scale benchmarks to test heap reduction and performance impact:
>>>   - FA CRM Sales Op. Flow
>>>   - FA DSS
>>>
>>> * The following benchmarks have been executed to verify that this
>>> feature doesn't impact performance when disabled (even when disabled
>>> there are still some "if (UseStringDeduplication)" executed in some
>>> hot paths).
>>>   - SPECjbb2005
>>>   - SPECjbb2013
>>>   - SPECjvm2008-XML
>>>
>>> * Various ad-hoc tests and microbenchmarks were also written and
>>> executed during the course of the development.
>>>
>>>
>>> Thanks!
>>> /Per
>>
>



More information about the hotspot-dev mailing list