<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 3/23/16 4:10 PM, Jon Masamitsu
wrote:<br>
</div>
<blockquote cite="mid:56F2F823.4020601@oracle.com" type="cite">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
On 03/23/2016 11:59 AM, Derek White wrote:<br>
<blockquote cite="mid:56F2E784.7070202@oracle.com" type="cite">
<meta content="text/html; charset=utf-8"
http-equiv="Content-Type">
<div class="moz-cite-prefix">Hi Jon,<br>
<br>
On 3/23/16 2:12 PM, Jon Masamitsu wrote:<br>
</div>
<blockquote cite="mid:56F2DCAB.3070600@oracle.com" type="cite">
<meta content="text/html; charset=utf-8"
http-equiv="Content-Type">
<font face="Times New Roman, Times, serif">Derek,<br>
<br>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Edrwhite/8149405/webrev.01/src/share/vm/oops/methodData.cpp.udiff.html">http://cr.openjdk.java.net/~drwhite/8149405/webrev.01/src/share/vm/oops/methodData.cpp.udiff.html</a><br>
</font><br>
<blockquote type="cite">
<pre> void MethodData::clean_method_data(BoolObjectClosure* is_alive) {
<span class="new">+ ResourceMark rm;</span>
for (ProfileData* data = first_data();
is_valid(data);
data = next_data(data)) {
data->clean_weak_klass_links(is_alive);
}
</pre>
</blockquote>
<font face="Times New Roman, Times, serif"><br>
The clean_weak_klass_links() above has a ResourceMark in it.<br>
<br>
<blockquote type="cite">void
DataLayout::clean_weak_klass_links(BoolObjectClosure* cl)
{<br>
ResourceMark m;<br>
data_in()->clean_weak_klass_links(cl);<br>
}</blockquote>
<br>
It's not clear to me where space is being allocated in
clean_method_data() so<br>
that the ResourceMark helps. My understanding of
ResourceMarks is thin<br>
so don't assume there is anything deep about this question.<br>
<br>
Jon<br>
<br>
</font></blockquote>
<font face="Times New Roman, Times, serif">You're right, it
isn't clear where space is being allocated without doing
detective work. I didn't see any conventions w.r.t
documentation, naming, type signatures, etc that would help.<br>
</font></blockquote>
<br>
<font face="Times New Roman, Times, serif">Right. I don't have
any ideas either. Just out of curiosity, did you<br>
try Native-Memory-Tracking with any enlightening results?<br>
</font></blockquote>
<br>
<font face="Times New Roman, Times, serif">I did try NMT. I never
got it to run in a reproduced failure. And I struggled to see any
real issues when I captured some logs in non-failing tests. Could
it be, because this was a temporary memory spike, that NMT didn't
show the "high-water mark", but the currently used memory? Neither
the "arena" subsections or the "Arena Chunk" section show that
much use.<br>
Here's a subset of the data:<br>
</font><br>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
<table frame="VOID" cols="4" rules="NONE" height="903" border="0"
cellspacing="0" width="449">
<colgroup><col width="163"><col width="91"><col width="91"><col
width="91"></colgroup> <tbody>
<tr>
<td align="LEFT" height="17" width="163">Native Memory
Tracking</td>
<td align="LEFT" width="91"><br>
</td>
<td align="LEFT" width="91"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"> Reserved</td>
<td align="LEFT">Committed</td>
</tr>
<tr>
<td align="LEFT" height="17">Total</td>
<td sdval="1053487" sdnum="1033;" align="RIGHT">1053487</td>
<td sdval="136079" sdnum="1033;" align="RIGHT">136079</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Java Heap </b></td>
<td sdval="716800" sdnum="1033;" align="RIGHT">716800</td>
<td sdval="65536" sdnum="1033;" align="RIGHT">65536</td>
</tr>
<tr>
<td align="LEFT" height="17">mmap</td>
<td sdval="716800" sdnum="1033;" align="RIGHT">716800</td>
<td sdval="65536" sdnum="1033;" align="RIGHT">65536</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Class </b></td>
<td sdval="7672" sdnum="1033;" align="RIGHT">7672</td>
<td sdval="7416" sdnum="1033;" align="RIGHT">7416</td>
</tr>
<tr>
<td align="LEFT" height="17">classes </td>
<td sdval="1691" sdnum="1033;" align="RIGHT">1691</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="120" sdnum="1033;" align="RIGHT">120</td>
<td sdval="1224" sdnum="1033;" align="RIGHT">1224</td>
</tr>
<tr>
<td align="LEFT" height="17">mmap</td>
<td sdval="7552" sdnum="1033;" align="RIGHT">7552</td>
<td sdval="7296" sdnum="1033;" align="RIGHT">7296</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Thread </b></td>
<td sdval="37798" sdnum="1033;" align="RIGHT">37798</td>
<td sdval="37798" sdnum="1033;" align="RIGHT">37798</td>
</tr>
<tr>
<td align="LEFT" height="17">thread </td>
<td sdval="80" sdnum="1033;" align="RIGHT">80</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17">stack</td>
<td sdval="35840" sdnum="1033;" align="RIGHT">35840</td>
<td sdval="35840" sdnum="1033;" align="RIGHT">35840</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="135" sdnum="1033;" align="RIGHT">135</td>
<td sdval="451" sdnum="1033;" align="RIGHT">451</td>
</tr>
<tr>
<td align="LEFT" height="17">arena</td>
<td sdval="1824" sdnum="1033;" align="RIGHT">1824</td>
<td sdval="159" sdnum="1033;" align="RIGHT">159</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Code </b></td>
<td sdval="248817" sdnum="1033;" align="RIGHT">248817</td>
<td sdval="8529" sdnum="1033;" align="RIGHT">8529</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="1073" sdnum="1033;" align="RIGHT">1073</td>
<td sdval="43760" sdnum="1033;" align="RIGHT">43760</td>
</tr>
<tr>
<td align="LEFT" height="17">mmap</td>
<td sdval="247744" sdnum="1033;" align="RIGHT">247744</td>
<td sdval="7456" sdnum="1033;" align="RIGHT">7456</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- GC </b></td>
<td sdval="30344" sdnum="1033;" align="RIGHT">30344</td>
<td sdval="6152" sdnum="1033;" align="RIGHT">6152</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="3336" sdnum="1033;" align="RIGHT">3336</td>
<td sdval="964" sdnum="1033;" align="RIGHT">964</td>
</tr>
<tr>
<td align="LEFT" height="17">mmap</td>
<td sdval="27008" sdnum="1033;" align="RIGHT">27008</td>
<td sdval="2816" sdnum="1033;" align="RIGHT">2816</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Compiler </b></td>
<td sdval="264" sdnum="1033;" align="RIGHT">264</td>
<td sdval="264" sdnum="1033;" align="RIGHT">264</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="5" sdnum="1033;" align="RIGHT">5</td>
<td sdval="61" sdnum="1033;" align="RIGHT">61</td>
</tr>
<tr>
<td align="LEFT" height="17">arena</td>
<td sdval="260" sdnum="1033;" align="RIGHT">260</td>
<td sdval="4" sdnum="1033;" align="RIGHT">4</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Internal </b></td>
<td sdval="4736" sdnum="1033;" align="RIGHT">4736</td>
<td sdval="4736" sdnum="1033;" align="RIGHT">4736</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="4672" sdnum="1033;" align="RIGHT">4672</td>
<td sdval="2596" sdnum="1033;" align="RIGHT">2596</td>
</tr>
<tr>
<td align="LEFT" height="17">mmap</td>
<td sdval="64" sdnum="1033;" align="RIGHT">64</td>
<td sdval="64" sdnum="1033;" align="RIGHT">64</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Symbol </b></td>
<td sdval="2187" sdnum="1033;" align="RIGHT">2187</td>
<td sdval="2187" sdnum="1033;" align="RIGHT">2187</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="1124" sdnum="1033;" align="RIGHT">1124</td>
<td sdval="6039" sdnum="1033;" align="RIGHT">6039</td>
</tr>
<tr>
<td align="LEFT" height="17">arena</td>
<td sdval="1064" sdnum="1033;" align="RIGHT">1064</td>
<td sdval="1" sdnum="1033;" align="RIGHT">1</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Native Memory Tracking </b></td>
<td sdval="547" sdnum="1033;" align="RIGHT">547</td>
<td sdval="547" sdnum="1033;" align="RIGHT">547</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="97" sdnum="1033;" align="RIGHT">97</td>
<td sdval="2010" sdnum="1033;" align="RIGHT">2010</td>
</tr>
<tr>
<td align="LEFT" height="17">tracking overhead</td>
<td sdval="450" sdnum="1033;" align="RIGHT">450</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Shared class space </b></td>
<td sdval="2" sdnum="1033;" align="RIGHT">2</td>
<td sdval="2" sdnum="1033;" align="RIGHT">2</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="2" sdnum="1033;" align="RIGHT">2</td>
<td sdval="1" sdnum="1033;" align="RIGHT">1</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Arena Chunk </b></td>
<td sdval="2908" sdnum="1033;" align="RIGHT">2908</td>
<td sdval="2908" sdnum="1033;" align="RIGHT">2908</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="2908" sdnum="1033;" align="RIGHT">2908</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Logging </b></td>
<td sdval="1" sdnum="1033;" align="RIGHT">1</td>
<td sdval="1" sdnum="1033;" align="RIGHT">1</td>
</tr>
<tr>
<td align="LEFT" height="17">malloc</td>
<td sdval="1" sdnum="1033;" align="RIGHT">1</td>
<td sdval="96" sdnum="1033;" align="RIGHT">96</td>
</tr>
<tr>
<td align="LEFT" height="17"><br>
</td>
<td align="LEFT"><br>
</td>
<td align="LEFT"><br>
</td>
</tr>
<tr>
<td align="LEFT" height="17"><b>- Unknown </b></td>
<td sdval="1408" sdnum="1033;" align="RIGHT">1408</td>
<td sdval="0" sdnum="1033;" align="RIGHT">0</td>
</tr>
<tr>
<td align="LEFT" height="17">mmap</td>
<td sdval="1408" sdnum="1033;" align="RIGHT">1408</td>
<td sdval="0" sdnum="1033;" align="RIGHT">0</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>
<blockquote cite="mid:56F2F823.4020601@oracle.com" type="cite"><font
face="Times New Roman, Times, serif"> <br>
<br>
</font>
<blockquote cite="mid:56F2E784.7070202@oracle.com" type="cite"><font
face="Times New Roman, Times, serif"> <br>
The problem is that the iterators first_data()/next_data()
allocate also, as well as other functions called further down:
parameters_type_data(), clean_extra_data(),
clean_extra_data(). <br>
</font></blockquote>
<br>
<font face="Times New Roman, Times, serif">I think the change
itself is correct and reasonable given the<br>
circumstances. <br>
<br>
Reviewed.<br>
<br>
Jon<br>
<br>
</font></blockquote>
<br>
<font face="Times New Roman, Times, serif">Thanks Jon!<br>
<br>
</font>
<blockquote cite="mid:56F2F823.4020601@oracle.com" type="cite"><font
face="Times New Roman, Times, serif"> </font>
<blockquote cite="mid:56F2E784.7070202@oracle.com" type="cite"><font
face="Times New Roman, Times, serif"> <br>
- Derek<br>
</font>
<blockquote cite="mid:56F2DCAB.3070600@oracle.com" type="cite"><font
face="Times New Roman, Times, serif"> </font>On 03/23/2016
08:02 AM, Derek White wrote:<br>
<blockquote cite="mid:56F2B016.30304@oracle.com" type="cite">This
is a very small fix that adds ResourceMarks to
MethodData::clean_method_data() (and two similar functions
nearby). <br>
<br>
Basically an iteration over all classes in all methods in
all classes was occurring in one ResourceMark during a full
gc, so we occasionally ran out of malloc space. <br>
<br>
Once again, x86 builds running on Win64 are the "canary in
the coal mine" for these kinds of temp. memory leaks, so
it's a great test case even if not a very realistic one! <br>
<br>
BUG: <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="https://bugs.openjdk.java.net/browse/JDK-8149405">https://bugs.openjdk.java.net/browse/JDK-8149405</a>
<br>
WEBREV: <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Edrwhite/8149405/webrev.01/">http://cr.openjdk.java.net/~drwhite/8149405/webrev.01/</a>
<br>
TESTS: jprt <br>
<br>
Thanks for looking, <br>
<br>
- Derek <br>
</blockquote>
<br>
</blockquote>
<br>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>