<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Hi Daniel,<br>
    <br>
    I stand corrected, any current size (>=0) satisfies the request
    (zero is greater than -1).<br>
    <br>
    I would not say it "ignores" it, just that it already is greater or
    equal to the request.<br>
    The current phrasing of ByteArrayOutputStream.ensureCapacity uses
    the "holds at least" phrasing.<br>
    It would risky to change the implementation of BAOS.ensureCapacity
    to not throw OOME on negative minCapacity.<br>
    <br>
    Roger<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 1/6/26 1:30 PM, Daniel Gredler
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:CAPA+ug6OCWreW8hXT7OTSGo-=Q7Xxyi1PUvfWAcmbXysZR7r=g@mail.gmail.com">
      
      <div dir="ltr">
        <div>Hi Roger,</div>
        <div><br>
        </div>
        <div>All points noted, thanks -- just wanted to double check on
          this:</div>
        <div><br>
        </div>
        <div>> I don't think you could call it `ensureCapacity()` if
          it ignores the request.</div>
        <div><br>
        </div>
        <div>If you pass a negative (i.e. invalid) argument, you need to
          either throw an exception or ignore the request. Both
          `ArrayList` and `StringBuilder` simply ignore calls with
          negative arguments (i.e. neither `new
          ArrayList().ensureCapacity(-1)` nor `new
          StringBuilder().ensureCapacity(-1)` throw an exception, they
          just ignore the request). The old `Vector` class does the
          same, though few developers will be using it at this stage.</div>
        <div><br>
        </div>
        <div>All of that to say that as a developer, ignoring an
          `ensureCapacity()` call with a negative capacity would not
          have surprised me in the least, and would be consistent with
          the other `ensureCapacity` methods in other core classes.</div>
        <div><br>
        </div>
        <div>Let me know your thoughts on this final point, and I'll
          move forward with both the CSR and the PR.</div>
        <div><br>
        </div>
        <div>Thanks!</div>
        <div><br>
        </div>
        <div>Daniel</div>
        <div><br>
        </div>
        <div><br>
        </div>
      </div>
      <br>
      <div class="gmail_quote gmail_quote_container">
        <div dir="ltr" class="gmail_attr">On Tue, Jan 6, 2026 at 3:54 PM
          Roger Riggs <<a href="mailto:roger.riggs@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">roger.riggs@oracle.com</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div> Hi Daniel,<br>
            <br>
            I don't think you could call it `ensureCapacity()` if it
            ignores the request.<br>
            <br>
            The limit is not specified, different VMs have different
            overheads.<br>
            <br>
            The exception and message are appropriate:
            "java.lang.OutOfMemoryError: Requested array size exceeds VM
            limit "<br>
            <br>
            For negative arguments, an IllegalArgumentException might be
            an improvement in usability for developers.<br>
            <br>
            [2] 8258565 is closed as "will not fix" because the memory
            limits are an implementation parameter, not specified.<br>
            <br>
            Thanks, Roger<br>
            <br>
            p.s. as an API change it will need a CSR. There's a "create
            a CSR" menu item on the issue and a template to fill out.<br>
            <br>
            <br>
            <div>On 1/6/26 9:01 AM, Daniel Gredler wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">
                <div>Hi Roger,</div>
                <div><br>
                </div>
                <div>Thanks for the feedback, I've created an issue in
                  JBS [1] and will create the PR in the coming days.</div>
                <div><br>
                </div>
                <div>This method currently throws an OOME if a negative
                  capacity is requested, but that should never happen
                  because it's only called internally after careful
                  parameter validation. Once it's public, users will be
                  able to request negative capacities directly. For the
                  public API, I'm leaning towards quietly ignoring calls
                  with non-positive capacities, a la
                  `AbstractStringBuilder`, instead of throwing an OOME.
                  Let me know if you agree?</div>
                <div><br>
                </div>
                <div>Also, do you know what the maximum possible
                  requested capacity is here? It would be good to avoid
                  the need for follow-up issues like this one [2] for
                  `ArrayList`.</div>
                <div><br>
                </div>
                <div>Take care,</div>
                <div><br>
                </div>
                <div>Daniel</div>
                <div><br>
                </div>
                <div>[1] <a href="https://bugs.openjdk.org/browse/JDK-8374610" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8374610</a></div>
                <div>[2] <a href="https://bugs.openjdk.org/browse/JDK-8258565" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8258565</a></div>
                <div><br>
                </div>
                <div><br>
                </div>
              </div>
              <br>
              <div class="gmail_quote">
                <div dir="ltr" class="gmail_attr">On Mon, Jan 5, 2026 at
                  3:54 PM Roger Riggs <<a href="mailto:roger.riggs@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">roger.riggs@oracle.com</a>>
                  wrote:<br>
                </div>
                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi
                  Daniel,<br>
                  <br>
                  That seems reasonable, allowing control over the
                  timing of resizes.<br>
                  Making it public is sensible too.<br>
                  <br>
                   From a higher point of view, are you sure you want to
                  be working with <br>
                  ByteArrayOutputStream and not ByteBuffer or Memory
                  Segments? There are <br>
                  more performance possibilities with those APIs.<br>
                  <br>
                  Regards, Roger<br>
                  <br>
                  <br>
                  On 1/5/26 7:15 AM, Daniel Gredler wrote:<br>
                  > Hi,<br>
                  ><br>
                  > I was recently looking at subclassing
                  `ByteArrayOutputStream` in an <br>
                  > application so that I could add a fast
                  VarHandle-based <br>
                  > `writeLong(long)` method (writing 8 bytes to the
                  byte array in one <br>
                  > go). The internal `ByteArrayOutputStream` buffer
                  is protected, so no <br>
                  > issue there, but `ensureCapacity(int)` is private
                  rather than <br>
                  > protected, and uses the internal `ArraysSupport`
                  class, so it's not <br>
                  > even easy to copy/paste as duplicate code in the
                  subclass. Similar <br>
                  > `ensureCapacity` methods in `ArrayList` and
                  `StringBuilder` are <br>
                  > public. Would a PR adjusting the visibility of
                  this method from <br>
                  > private to protected be accepted?<br>
                  ><br>
                  > Take care,<br>
                  ><br>
                  > Daniel<br>
                  ><br>
                  ><br>
                  <br>
                </blockquote>
              </div>
            </blockquote>
            <br>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>