RFR: 8314774: Optimize URLEncoder

Jaikiran Pai jpai at openjdk.org
Wed Aug 23 09:09:12 UTC 2023


On Sat, 19 Aug 2023 20:57:27 GMT, Glavo <duke at openjdk.org> wrote:

> I mainly made these optimizations:
> 
> * Avoid allocating `StringBuilder` when there are no characters in the URL that need to be encoded;
> * Implement a fast path for UTF-8.
> 
> In addition to improving performance, these optimizations also reduce temporary objects:
> 
> * It no longer allocates any object when there are no characters in the URL that need to be encoded;
> * The initial size of StringBuilder is larger to avoid expansion as much as possible;
> * For UTF-8, the temporary `CharArrayWriter`, strings and byte arrays are no longer needed.
> 
> The results of the `URLEncodeDecode` benchmark:
> 
> 
> Before:
> Benchmark                       (count)  (maxLength)  (mySeed)  Mode  Cnt  Score   Error  Units
> URLEncodeDecode.testEncodeUTF8     1024         1024         3  avgt   15  5.587 ? 0.010  ms/op
> 
> After:
> Benchmark                       (count)  (maxLength)  (mySeed)  Mode  Cnt  Score   Error  Units
> URLEncodeDecode.testEncodeUTF8     1024         1024         3  avgt   15  3.582 ? 0.054  ms/op
> 
> 
> I also updated the tests to add more test cases.

Hello Glavo, for changes like these, I think it would be more productive and useful to create a mailing list discussion first to provide some context on why this change is needed and gathering inputs from people familiar with this code on whether this change is necessary and worth it. Such discussions will then give the Reviewers some context and inputs on what needs to be considered in these changes and to what extent the changes should be done in the code.

With the proposed changes in this PR which touches the character encoding handling and such, I think this will need a very thorough review keeping aside the performance aspects. I don't have enough experience of this class to know if it's worth doing this amount of change for any kind of performance improvements which may not be visible outside of micro benchmarks.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15354#issuecomment-1689424850


More information about the net-dev mailing list