RFR (xs): 8134992: vm/gc/compact/Compact_InternedStrings_Strings failed due to a malloc() failure
Derek White
derek.white at oracle.com
Tue Feb 23 15:19:15 UTC 2016
Thanks Bengt!
On 2/23/16 4:27 AM, Bengt Rutisson wrote:
>
> Hi Derek,
>
> On 2016-02-22 19:39, Derek White wrote:
>> Very simple fix for a bug on Solaris and small performance issue
>> everywhere else.
>>
>> *Bug*: JDK-8134992 <https://bugs.openjdk.java.net/browse/JDK-8134992>
>> vm/gc/compact/Compact_InternedStrings_Strings failed due to a
>> malloc() failure
>> *Webrev*: http://cr.openjdk.java.net/~drwhite/8134992/webrev.01
>> *Tests*: jprt, partial Aurora perf.
>
>
> Looks good.
>
> Bengt
>
>>
>> *Background*:
>> Many of the vm.gc.compact tests create large strings and/or char
>> arrays that don't get allocated in the young gen.
>> RuntimeStub::_new_array_Java() and
>> RuntimeStub::_new_array_nozero_Java() have to call
>> CollectedHeap::new_store_pre_barrier() when deferred store barriers
>> are turned on. Unless the object is in the young gen,
>> new_store_pre_barrier() marks every card for the entire new object as
>> dirty. If the object is very large, this can result in so many
>> enqueued dirty cards that it runs out of memory (due to the malloc
>> constraints in Solaris).
>>
>> But primitive arrays don't have any references that need need a store
>> barrier, so the whole issue can be avoided in this case. Doing so
>> reduces gc's malloc space usage by up to 30% in these compact tests.
>>
>> Note that these tests are essentially String.intern micro-benchmarks,
>> so I haven't seen a performance improvement in more general code.
>>
>> Thanks!
>> - Derek White
>>
>>
>>
>> *clean:* *8134992*
>>
>> *KB* *
>> * *reserved* *reserved* *diff* *%*
>> Humongous_InternedStrings malloc 63743 48669 -15,074 24%
>> Compact_InternedStrings1 malloc 41738 39328 -2,410 6%
>> Compact_Arrays malloc 50943 50940 -3 0%
>> Humongous_Strings malloc 66503 50989 -15,514 23%
>> *Compact_Strings* malloc *62757* 50941 -11,816 19%
>> /Compact_Strings_InternedStrings/ malloc 68024 50944 -17,080 25%
>> Humongous_NonbranchyTree5M malloc 51020 51038 18
>> Compact_InternedStrings malloc 62828 50938 -11,890 19%
>> Compact_NonbranchyTree malloc 51024 51016 -8 0%
>> Compact_Arrays1 malloc 50673 50682 9 0%
>> Humongous_Arrays malloc 50949 50943 -6 0%
>> Compact_NonbranchyTree1 malloc 50704 50718 14 0%
>> Compact_NonbranchyTree_TwoFields malloc 51042 51015 -27 0%
>> Compact_Strings1 malloc 52072 50681 -1,391 3%
>> Compact_Arrays_ArrayOf1 malloc 50692 50689 -3 0%
>> Humongous_Strings1 malloc 52003 50709 -1,294 2%
>> Compact_Strings_ArrayOf1 malloc 52081 47632 -4,449 9%
>> Compact_InternedStrings_NonbranchyTree malloc 64031 50980
>> -13,051 20%
>> Humongous_InternedStrings1 malloc 43035 40631 -2,404 6%
>> Compact_TwoFields_InternedStrings malloc 50953 50938 -15 0%
>> Compact_NonbranchyTree_TwoFields1 malloc 50708 50699 -9 0%
>> Compact_NonbranchyTree_ArrayOf malloc 51013 51008 -5 0%
>> Humongous_Arrays5M malloc 50949 50955 6 0%
>> Compact_Arrays_TwoFields malloc 50941 50955 14 0%
>> Compact_Arrays_ArrayOf malloc 50945 50949 4 0%
>> Humongous_NonbranchyTree1 malloc 50709 50738 29 0%
>> Compact_Arrays_TwoFields1 malloc 50694 50710 16 0%
>> Humongous_NonbranchyTree malloc 51018 51041 23 0%
>> Compact_NonbranchyTree_ArrayOf1 malloc 50728 50711 -17 0%
>> Humongous_Arrays1 malloc 50694 50699 5 0%
>> Compact_InternedStrings_Strings malloc 63836 50865 -12,971 20%
>> Compact_Strings_TwoFields malloc 72703 50932 -21,771 30%
>> Compact_Strings_ArrayOf malloc 66452 50932 -15,520 23%
>> *AVG DIFF (KB)*
>>
>>
>> *-4,442* *7.15%*
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20160223/dde0d411/attachment.htm>
More information about the hotspot-gc-dev
mailing list