<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>