<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<big>Hi Derek,</big><br>
<br>
<br>
<div class="moz-cite-prefix">On 2016-02-22 19:39, Derek White wrote:<br>
</div>
<blockquote cite="mid:56CB55CA.9030801@oracle.com" type="cite">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<big>Very simple fix for a bug on Solaris and small performance
issue everywhere else.<br>
<br>
<b>Bug</b>: <a moz-do-not-send="true" class="issue-link"
data-issue-key="JDK-8134992"
href="https://bugs.openjdk.java.net/browse/JDK-8134992"
id="key-val" rel="4842191"> JDK-8134992</a>
vm/gc/compact/Compact_InternedStrings_Strings failed due to a
malloc() failure<br>
<b>Webrev</b>: <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Edrwhite/8134992/webrev.01">http://cr.openjdk.java.net/~drwhite/8134992/webrev.01</a><br>
</big></blockquote>
<br>
<big>Good catch!<br>
<br>
The change looks good to me.<br>
<br>
/Mikael</big><br>
<br>
<blockquote cite="mid:56CB55CA.9030801@oracle.com" type="cite"><big>
<b>Tests</b>: jprt, partial Aurora perf.<br>
<br>
<b>Background</b>:<br>
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).<br>
<br>
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.<br>
<br>
Note that these tests are essentially String.intern
micro-benchmarks, so I haven't seen a performance improvement in
more general code.<br>
<br>
Thanks!<br>
- Derek White</big>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<br>
<br>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
<table frame="VOID" cols="6" rules="NONE" border="0"
cellspacing="0">
<colgroup><col width="333"><col width="99"><col width="99"><col
width="99"><col width="99"><col width="99"></colgroup> <tbody>
<tr>
<td align="LEFT" height="18" width="333"><br>
</td>
<td align="LEFT" width="99"><br>
</td>
<td align="CENTER" width="99"><b>clean:</b></td>
<td sdval="8134992" sdnum="1033;" align="CENTER" width="99"><b>8134992</b></td>
<td align="LEFT" width="99"><br>
</td>
<td align="LEFT" width="99"><br>
</td>
</tr>
<tr>
<td align="CENTER" height="18"><b>KB</b></td>
<td align="CENTER"><b><br>
</b></td>
<td align="CENTER"><b>reserved</b></td>
<td align="CENTER"><b>reserved</b></td>
<td align="CENTER"><b>diff</b></td>
<td align="CENTER"><b>%</b></td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_InternedStrings</td>
<td align="LEFT">malloc</td>
<td sdval="63743" sdnum="1033;" align="RIGHT">63743</td>
<td sdval="48669" sdnum="1033;" align="RIGHT">48669</td>
<td sdval="-15074" sdnum="1033;0;#,##0" align="RIGHT">-15,074</td>
<td sdval="0.23648086848752" sdnum="1033;0;0%" align="RIGHT">24%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_InternedStrings1</td>
<td align="LEFT">malloc</td>
<td sdval="41738" sdnum="1033;" align="RIGHT">41738</td>
<td sdval="39328" sdnum="1033;" align="RIGHT">39328</td>
<td sdval="-2410" sdnum="1033;0;#,##0" align="RIGHT">-2,410</td>
<td sdval="0.0577411471560688" sdnum="1033;0;0%"
align="RIGHT">6%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Arrays</td>
<td align="LEFT">malloc</td>
<td sdval="50943" sdnum="1033;" align="RIGHT">50943</td>
<td sdval="50940" sdnum="1033;" align="RIGHT">50940</td>
<td sdval="-3" sdnum="1033;0;#,##0" align="RIGHT">-3</td>
<td sdval="0.0000588893469171126" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_Strings</td>
<td align="LEFT">malloc</td>
<td sdval="66503" sdnum="1033;" align="RIGHT">66503</td>
<td sdval="50989" sdnum="1033;" align="RIGHT">50989</td>
<td sdval="-15514" sdnum="1033;0;#,##0" align="RIGHT">-15,514</td>
<td sdval="0.233282709050719" sdnum="1033;0;0%"
align="RIGHT">23%</td>
</tr>
<tr>
<td align="LEFT" height="18"><b>Compact_Strings</b></td>
<td align="LEFT">malloc</td>
<td sdval="62757" sdnum="1033;" align="RIGHT"><b>62757</b></td>
<td sdval="50941" sdnum="1033;" align="RIGHT">50941</td>
<td sdval="-11816" sdnum="1033;0;#,##0" align="RIGHT">-11,816</td>
<td sdval="0.188281785298851" sdnum="1033;0;0%"
align="RIGHT">19%</td>
</tr>
<tr>
<td align="LEFT" height="18"><i>Compact_Strings_InternedStrings</i></td>
<td align="LEFT">malloc</td>
<td sdval="68024" sdnum="1033;" align="RIGHT">68024</td>
<td sdval="50944" sdnum="1033;" align="RIGHT">50944</td>
<td sdval="-17080" sdnum="1033;0;#,##0" align="RIGHT">-17,080</td>
<td sdval="0.251087851346584" sdnum="1033;0;0%"
align="RIGHT">25%</td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_NonbranchyTree5M</td>
<td align="LEFT">malloc</td>
<td sdval="51020" sdnum="1033;" align="RIGHT">51020</td>
<td sdval="51038" sdnum="1033;" align="RIGHT">51038</td>
<td sdval="18" sdnum="1033;0;#,##0" align="RIGHT">18</td>
<td sdnum="1033;0;0%" align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_InternedStrings</td>
<td align="LEFT">malloc</td>
<td sdval="62828" sdnum="1033;" align="RIGHT">62828</td>
<td sdval="50938" sdnum="1033;" align="RIGHT">50938</td>
<td sdval="-11890" sdnum="1033;0;#,##0" align="RIGHT">-11,890</td>
<td sdval="0.189246832622398" sdnum="1033;0;0%"
align="RIGHT">19%</td>
</tr>
<tr>
<td align="LEFT" height="19">Compact_NonbranchyTree</td>
<td align="LEFT">malloc</td>
<td sdval="51024" sdnum="1033;" align="RIGHT">51024</td>
<td sdval="51016" sdnum="1033;" align="RIGHT">51016</td>
<td sdval="-8" sdnum="1033;0;#,##0" align="RIGHT">-8</td>
<td sdval="0.000156788962057064" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Arrays1</td>
<td align="LEFT">malloc</td>
<td sdval="50673" sdnum="1033;" align="RIGHT">50673</td>
<td sdval="50682" sdnum="1033;" align="RIGHT">50682</td>
<td sdval="9" sdnum="1033;0;#,##0" align="RIGHT">9</td>
<td sdval="-0.000177609377775223" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_Arrays</td>
<td align="LEFT">malloc</td>
<td sdval="50949" sdnum="1033;" align="RIGHT">50949</td>
<td sdval="50943" sdnum="1033;" align="RIGHT">50943</td>
<td sdval="-6" sdnum="1033;0;#,##0" align="RIGHT">-6</td>
<td sdval="0.000117764823647226" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_NonbranchyTree1</td>
<td align="LEFT">malloc</td>
<td sdval="50704" sdnum="1033;" align="RIGHT">50704</td>
<td sdval="50718" sdnum="1033;" align="RIGHT">50718</td>
<td sdval="14" sdnum="1033;0;#,##0" align="RIGHT">14</td>
<td sdval="-0.000276112338277068" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="19">Compact_NonbranchyTree_TwoFields</td>
<td align="LEFT">malloc</td>
<td sdval="51042" sdnum="1033;" align="RIGHT">51042</td>
<td sdval="51015" sdnum="1033;" align="RIGHT">51015</td>
<td sdval="-27" sdnum="1033;0;#,##0" align="RIGHT">-27</td>
<td sdval="0.000528976137298742" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Strings1</td>
<td align="LEFT">malloc</td>
<td sdval="52072" sdnum="1033;" align="RIGHT">52072</td>
<td sdval="50681" sdnum="1033;" align="RIGHT">50681</td>
<td sdval="-1391" sdnum="1033;0;#,##0" align="RIGHT">-1,391</td>
<td sdval="0.0267130127515748" sdnum="1033;0;0%"
align="RIGHT">3%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Arrays_ArrayOf1</td>
<td align="LEFT">malloc</td>
<td sdval="50692" sdnum="1033;" align="RIGHT">50692</td>
<td sdval="50689" sdnum="1033;" align="RIGHT">50689</td>
<td sdval="-3" sdnum="1033;0;#,##0" align="RIGHT">-3</td>
<td sdval="0.0000591809358478912" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_Strings1</td>
<td align="LEFT">malloc</td>
<td sdval="52003" sdnum="1033;" align="RIGHT">52003</td>
<td sdval="50709" sdnum="1033;" align="RIGHT">50709</td>
<td sdval="-1294" sdnum="1033;0;#,##0" align="RIGHT">-1,294</td>
<td sdval="0.0248831798165491" sdnum="1033;0;0%"
align="RIGHT">2%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Strings_ArrayOf1</td>
<td align="LEFT">malloc</td>
<td sdval="52081" sdnum="1033;" align="RIGHT">52081</td>
<td sdval="47632" sdnum="1033;" align="RIGHT">47632</td>
<td sdval="-4449" sdnum="1033;0;#,##0" align="RIGHT">-4,449</td>
<td sdval="0.0854246270232907" sdnum="1033;0;0%"
align="RIGHT">9%</td>
</tr>
<tr>
<td align="LEFT" height="19">Compact_InternedStrings_NonbranchyTree</td>
<td align="LEFT">malloc</td>
<td sdval="64031" sdnum="1033;" align="RIGHT">64031</td>
<td sdval="50980" sdnum="1033;" align="RIGHT">50980</td>
<td sdval="-13051" sdnum="1033;0;#,##0" align="RIGHT">-13,051</td>
<td sdval="0.203823148162609" sdnum="1033;0;0%"
align="RIGHT">20%</td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_InternedStrings1</td>
<td align="LEFT">malloc</td>
<td sdval="43035" sdnum="1033;" align="RIGHT">43035</td>
<td sdval="40631" sdnum="1033;" align="RIGHT">40631</td>
<td sdval="-2404" sdnum="1033;0;#,##0" align="RIGHT">-2,404</td>
<td sdval="0.0558615080748228" sdnum="1033;0;0%"
align="RIGHT">6%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_TwoFields_InternedStrings</td>
<td align="LEFT">malloc</td>
<td sdval="50953" sdnum="1033;" align="RIGHT">50953</td>
<td sdval="50938" sdnum="1033;" align="RIGHT">50938</td>
<td sdval="-15" sdnum="1033;0;#,##0" align="RIGHT">-15</td>
<td sdval="0.000294388946676327" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="19">Compact_NonbranchyTree_TwoFields1</td>
<td align="LEFT">malloc</td>
<td sdval="50708" sdnum="1033;" align="RIGHT">50708</td>
<td sdval="50699" sdnum="1033;" align="RIGHT">50699</td>
<td sdval="-9" sdnum="1033;0;#,##0" align="RIGHT">-9</td>
<td sdval="0.000177486787094727" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="19">Compact_NonbranchyTree_ArrayOf</td>
<td align="LEFT">malloc</td>
<td sdval="51013" sdnum="1033;" align="RIGHT">51013</td>
<td sdval="51008" sdnum="1033;" align="RIGHT">51008</td>
<td sdval="-5" sdnum="1033;0;#,##0" align="RIGHT">-5</td>
<td sdval="0.0000980142316664434" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_Arrays5M</td>
<td align="LEFT">malloc</td>
<td sdval="50949" sdnum="1033;" align="RIGHT">50949</td>
<td sdval="50955" sdnum="1033;" align="RIGHT">50955</td>
<td sdval="6" sdnum="1033;0;#,##0" align="RIGHT">6</td>
<td sdval="-0.000117764823647226" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Arrays_TwoFields</td>
<td align="LEFT">malloc</td>
<td sdval="50941" sdnum="1033;" align="RIGHT">50941</td>
<td sdval="50955" sdnum="1033;" align="RIGHT">50955</td>
<td sdval="14" sdnum="1033;0;#,##0" align="RIGHT">14</td>
<td sdval="-0.000274827741897576" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Arrays_ArrayOf</td>
<td align="LEFT">malloc</td>
<td sdval="50945" sdnum="1033;" align="RIGHT">50945</td>
<td sdval="50949" sdnum="1033;" align="RIGHT">50949</td>
<td sdval="4" sdnum="1033;0;#,##0" align="RIGHT">4</td>
<td sdval="-0.0000785160467171586" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_NonbranchyTree1</td>
<td align="LEFT">malloc</td>
<td sdval="50709" sdnum="1033;" align="RIGHT">50709</td>
<td sdval="50738" sdnum="1033;" align="RIGHT">50738</td>
<td sdval="29" sdnum="1033;0;#,##0" align="RIGHT">29</td>
<td sdval="-0.000571890591413826" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Arrays_TwoFields1</td>
<td align="LEFT">malloc</td>
<td sdval="50694" sdnum="1033;" align="RIGHT">50694</td>
<td sdval="50710" sdnum="1033;" align="RIGHT">50710</td>
<td sdval="16" sdnum="1033;0;#,##0" align="RIGHT">16</td>
<td sdval="-0.000315619205428552" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="19">Humongous_NonbranchyTree</td>
<td align="LEFT">malloc</td>
<td sdval="51018" sdnum="1033;" align="RIGHT">51018</td>
<td sdval="51041" sdnum="1033;" align="RIGHT">51041</td>
<td sdval="23" sdnum="1033;0;#,##0" align="RIGHT">23</td>
<td sdval="-0.000450821278764391" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="19">Compact_NonbranchyTree_ArrayOf1</td>
<td align="LEFT">malloc</td>
<td sdval="50728" sdnum="1033;" align="RIGHT">50728</td>
<td sdval="50711" sdnum="1033;" align="RIGHT">50711</td>
<td sdval="-17" sdnum="1033;0;#,##0" align="RIGHT">-17</td>
<td sdval="0.000335120643431663" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Humongous_Arrays1</td>
<td align="LEFT">malloc</td>
<td sdval="50694" sdnum="1033;" align="RIGHT">50694</td>
<td sdval="50699" sdnum="1033;" align="RIGHT">50699</td>
<td sdval="5" sdnum="1033;0;#,##0" align="RIGHT">5</td>
<td sdval="-0.000098631001696381" sdnum="1033;0;0%"
align="RIGHT">0%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_InternedStrings_Strings</td>
<td align="LEFT">malloc</td>
<td sdval="63836" sdnum="1033;" align="RIGHT">63836</td>
<td sdval="50865" sdnum="1033;" align="RIGHT">50865</td>
<td sdval="-12971" sdnum="1033;0;#,##0" align="RIGHT">-12,971</td>
<td sdval="0.203192555924557" sdnum="1033;0;0%"
align="RIGHT">20%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Strings_TwoFields</td>
<td align="LEFT">malloc</td>
<td sdval="72703" sdnum="1033;" align="RIGHT">72703</td>
<td sdval="50932" sdnum="1033;" align="RIGHT">50932</td>
<td sdval="-21771" sdnum="1033;0;#,##0" align="RIGHT">-21,771</td>
<td sdval="0.299451191835275" sdnum="1033;0;0%"
align="RIGHT">30%</td>
</tr>
<tr>
<td align="LEFT" height="18">Compact_Strings_ArrayOf</td>
<td align="LEFT">malloc</td>
<td sdval="66452" sdnum="1033;" align="RIGHT">66452</td>
<td sdval="50932" sdnum="1033;" align="RIGHT">50932</td>
<td sdval="-15520" sdnum="1033;0;#,##0" align="RIGHT">-15,520</td>
<td sdval="0.233552037560946" sdnum="1033;0;0%"
align="RIGHT">23%</td>
</tr>
<tr>
<td align="RIGHT" height="18"><b>AVG DIFF (KB)</b></td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
<td sdval="-4442.12121212121" sdnum="1033;0;#,##0"
align="RIGHT"><b>-4,442</b></td>
<td sdval="0.0715152272975245" sdnum="1033;0;0.00%"
align="RIGHT"><b>7.15%</b></td>
</tr>
</tbody>
</table>
<title></title>
<meta name="GENERATOR" content="OpenOffice 4.1.1 (Unix)">
<style>
<!--
BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Arial"; font-size:x-small }
-->
</style><br>
</blockquote>
<br>
</body>
</html>