<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p>Uhm I don't have all that data that you seem to have in your
      image :-(</p>
    <p>My memory view looks empty. There is no allocation, and if I
      explicitly go and look I see 6-7 allocations in total :-)</p>
    <p>Is the recording you shared the same you are looking at?</p>
    <p>Maurizio<br>
    </p>
    <div class="moz-cite-prefix">On 26/10/2022 10:11, Sebastian Stenzel
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:607A7340-825F-4D2B-B1D5-F1A16103E3B8@gmail.com">
      
      Thanks for taking a look.
      <div class=""><br class="">
      </div>
      <div class="">Please note that I'm not looking for a memory leak
        here: The objects are short-living (within the scope of a
        method) and no two instances exist at the same time, hence no
        increase in heap size.<br class="">
        <div class=""><br class="">
        </div>
        <div class="">Instead, what got me wondering was the mismatch
          between the amount of memory allocated for a rather small
          number of objects (740 MiB for 141 DirectByteBuffers). At
          least the record only contains these 72 allocations via
          `ByteBuffer.duplicate()` + 69
          `NativeMemorySegmentImpl.makeByteBuffer()`. I'm looking at
          this chart: <a href="https://urldefense.com/v3/__https://static.cryptomator.org/tmp/before890035c.png__;!!ACWV5N9M2RV99hQ!JckaBSJm5So1bCqFKc-DKIJwby_3IL0NrwJF28uq06RV8KF5cODe9zClnOFenKodB7r-jU1KwoEwrH3lNJ9ee622dbMqw0eIuQ$" class="" moz-do-not-send="true">https://static.cryptomator.org/tmp/before890035c.png</a></div>
        <div class=""><br class="">
        </div>
        <div class="">I have very limited experience with JFR and JMC
          and don't know if it is profiling of sampling allocations. But
          maybe the events are incomplete and I'm in fact dealing with
          thousands of instances?</div>
        <div class=""><br class="">
        </div>
        <div class="">
          <div class=""><br class="">
          </div>
          <div class="">
            <div>
              <blockquote type="cite" class="">
                <div class="">On 26. Oct 2022, at 10:53, Maurizio
                  Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" class="moz-txt-link-freetext" moz-do-not-send="true">maurizio.cimadamore@oracle.com</a>>
                  wrote:</div>
                <br class="Apple-interchange-newline">
                <div class="">
                  <div class="">
                    <p class="">Looking at this recordings with JMC is
                      inconclusive.</p>
                    <p class="">All I see is that your app seems to be
                      using up to 20MB heap, which seems rather low.</p>
                    <p class="">The number of live objects, at least
                      according to the tool is a handful (< 10).</p>
                    <p class="">I don't see anything here indicating a
                      problem? (but maybe I'm looking in the wrong
                      place?)<br class="">
                    </p>
                    <p class="">Maurizio<br class="">
                    </p>
                    <div class="moz-cite-prefix">On 25/10/2022 15:15,
                      Sebastian Stenzel wrote:<br class="">
                    </div>
                    <blockquote type="cite" cite="mid:D73370F0-A6BB-4844-A7B2-87D3F9516586@gmail.com" class=""> Ok so here are the recordings:
                      <div class=""><br class="">
                      </div>
                      <div class="">with duplicate(): <a href="https://urldefense.com/v3/__https://static.cryptomator.org/tmp/before890035c.jfr__;!!ACWV5N9M2RV99hQ!JDzHI5oiHSZJaLRKXbpqU6kqSKHSD0yZEIW8lQT4wRJq0M-_iS6Kz59xcSpcX_sMupZlUpzmv9uLpTNulFGUEIRVe93lmH_Uzw$" class="" moz-do-not-send="true">https://static.cryptomator.org/tmp/before890035c.jfr</a></div>
                      <div class="">without: <a href="https://urldefense.com/v3/__https://static.cryptomator.org/tmp/after890035c.jfr__;!!ACWV5N9M2RV99hQ!JDzHI5oiHSZJaLRKXbpqU6kqSKHSD0yZEIW8lQT4wRJq0M-_iS6Kz59xcSpcX_sMupZlUpzmv9uLpTNulFGUEIRVe93JaaOc7g$" class="" moz-do-not-send="true">https://static.cryptomator.org/tmp/after890035c.jfr</a></div>
                      <div class=""><br class="">
                      </div>
                      <div class="">This is the diff in code: <a href="https://urldefense.com/v3/__https://github.com/cryptomator/jfuse/commit/890035c702489cdb2e094a1fc767e75b15b04891__;!!ACWV5N9M2RV99hQ!JDzHI5oiHSZJaLRKXbpqU6kqSKHSD0yZEIW8lQT4wRJq0M-_iS6Kz59xcSpcX_sMupZlUpzmv9uLpTNulFGUEIRVe92yJr55Hg$" class="" moz-do-not-send="true">https://github.com/cryptomator/jfuse/commit/890035c702489cdb2e094a1fc767e75b15b04891</a></div>
                      <div class=""><br class="">
                      </div>
                      <div class="">I was testing the `read` method in
                        this class. `write` (with its
                        `.asReadOnlyBuffer()`) did not draw my
                        attention.</div>
                      <div class="">
                        <div class="">
                          <div class="">
                            <div class=""><br class="">
                              <blockquote type="cite" class="">
                                <div class="">On 25. Oct 2022, at 15:03,
                                  Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" class="moz-txt-link-freetext" moz-do-not-send="true">maurizio.cimadamore@oracle.com</a>>
                                  wrote:</div>
                                <br class="Apple-interchange-newline">
                                <div class="">
                                  <div class="">No worries.<br class="">
                                    <br class="">
                                    I guess having a look at jfr file
                                    would be useful. But note that I
                                    don't think you can send that to the
                                    mailing list - AFAIK, attachments
                                    are dropped.<br class="">
                                    <br class="">
                                    Also, forgot to ask - is this
                                    something for which you saw a
                                    difference between 18 and 19?
                                    Because that would be odd too.<br class="">
                                    <br class="">
                                    Maurizio<br class="">
                                    <br class="">
                                    On 25/10/2022 13:26, Sebastian
                                    Stenzel wrote:<br class="">
                                    <blockquote type="cite" class="">I
                                      can't reproduce it any longer. ðŸ˜–<br class="">
                                      <br class="">
                                      I swear I would not have consulted
                                      the mailing list, if the
                                      observation had not been that
                                      spooky. Especially regarding said
                                      discrepency between
                                      `asReadOnlyBuffer()` and
                                      `duplicate()`.<br class="">
                                      <br class="">
                                      I still have the .jfr file,
                                      though. Is this of any use (other
                                      than proving I'm not seeing
                                      ghosts)?<br class="">
                                      <br class="">
                                      <blockquote type="cite" class="">On
                                        25. Oct 2022, at 13:15, Maurizio
                                        Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" class="moz-txt-link-freetext" moz-do-not-send="true">maurizio.cimadamore@oracle.com</a>>
                                        wrote:<br class="">
                                        <br class="">
                                        <br class="">
                                        On 25/10/2022 12:04, Maurizio
                                        Cimadamore wrote:<br class="">
                                        <blockquote type="cite" class="">```<br class="">
                                          public MappedByteBuffer
                                          duplicate() {<br class="">
                                                  return new
                                          DirectByteBuffer(this,<br class="">
                                              this.markValue(),<br class="">
                                              this.position(),<br class="">
                                              this.limit(),<br class="">
                                              this.capacity(),<br class="">
                                              0,<br class="">
                                          <br class="">
                                              fileDescriptor(),<br class="">
                                              isSync(),<br class="">
                                          <br class="">
                                              segment);<br class="">
                                              }<br class="">
                                          ```<br class="">
                                        </blockquote>
                                        Btw, the implementation of
                                        `adReadOnlyBuffer` is virtually
                                        identical to the above - the
                                        only difference is that
                                        DirectBuffer::asReadOnlyBuffer
                                        creates a new DIrectBufferR
                                        (where R stands for Read Only),
                                        not just another DirectBuffer.
                                        On read-only direct buffers
                                        (DirectBufferR), asReadOnly
                                        buffer just calls duplicate().<br class="">
                                        <br class="">
                                        So, I think it's very strange
                                        that one one of them misbehave,
                                        since the implementation is so
                                        close.<br class="">
                                        <br class="">
                                        What do you use to monitor the
                                        allocations? One theory is that
                                        perhaps one version of the code
                                        "escapes" better than the other,
                                        so the numbers you see are
                                        skewed, and in some cases you
                                        see the actual BB allocations on
                                        the heap, whereas in the other
                                        case you don't see anything
                                        because the JVM scalarizes the
                                        BB views. But again, the
                                        `duplicate` and
                                        `adreadOnlyBuffer` are so close
                                        to each other that it's hard to
                                        imagine meaningful differences
                                        in terms of escape analysis
                                        (even though escape analsyis can
                                        sometimes act in surprising
                                        ways).<br class="">
                                        <br class="">
                                        Maurizio<br class="">
                                        <br class="">
                                      </blockquote>
                                    </blockquote>
                                  </div>
                                </div>
                              </blockquote>
                            </div>
                            <br class="">
                          </div>
                        </div>
                      </div>
                    </blockquote>
                  </div>
                </div>
              </blockquote>
            </div>
            <br class="">
          </div>
        </div>
      </div>
    </blockquote>
  </body>
</html>