RFR (xs): 8134992: vm/gc/compact/Compact_InternedStrings_Strings failed due to a malloc() failure
Derek White
derek.white at oracle.com
Mon Feb 22 18:39:06 UTC 2016
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.
*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/20160222/a14bf19e/attachment.htm>
More information about the hotspot-gc-dev
mailing list