RFR: 8316681: Rewrite URLEncoder.encode to use small reusable buffers [v2]
Daniel Fuchs
dfuchs at openjdk.org
Thu Sep 21 18:57:36 UTC 2023
On Thu, 21 Sep 2023 18:51:56 GMT, Claes Redestad <redestad at openjdk.org> wrote:
>> `URLEncoder` currently appends chars that needs encoding into a `java.io.CharArrayWriter`, converts that to a `String`, uses `String::getBytes` to get the encoded bytes and then appends these bytes in a escaped manner to the output stream. This is somewhat inefficient.
>>
>> This PR replaces the `CharArrayWriter` with a reusable `CharBuffer` + `ByteBuffer` pair. This allows us to encode to the output `StringBuilder` in small chunks, with greatly reduced allocation as a result.
>>
>> The exact size of the buffers is an open question, but generally it seems that a tiny buffer wins by virtue of allocating less, and that the per chunk overheads are relatively small.
>
> Claes Redestad has updated the pull request incrementally with one additional commit since the last revision:
>
> Minor refactoring, drop unnecessary double cast
Looks reasonable to me. Approved as long as tier2 still passes.
-------------
Marked as reviewed by dfuchs (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/15865#pullrequestreview-1638508620
More information about the net-dev
mailing list